gpt4 book ai didi

spring - Spring Controller 的 AOP

转载 作者:行者123 更新时间:2023-12-01 06:45:33 25 4
gpt4 key购买 nike

Spring 的 AOP 功能非常棒,它可以轻松地向 Controller 添加很酷且有用的注释。例如,我编写了一个 @Authenticated 注释,它允许经过身份验证的用户通过 Controller 方法或重定向到登录页面。好玩的东西。

但是,Spring 的 Controller 可以返回各种不同的类型。它们可以返回字符串、ModelAndView 对象,甚至是 void。我的代码库中有使用所有三种类型的方法。但是,我想更改我的 @Authenticated 注释以呈现和返回特定页面,我希望通过返回 ModelAndView 对象来实现。是通过要求我的所有 Controller 方法返回 ModelAndView 来实现这一点的唯一方法吗?

我想要的 Controller 示例:

@Controller
public class MyController() {
@Authenticated
@RequestMapping("/myscore")
public String myScorePage(ModelMap model) {
return "myScorePage";
}

@Authenticated
@RequestMapping("/anotherPage")
public ModelAndView something() {
return new ModelAndView("anotherPage",someModelStuff());
}
}

@Aspect
public class NotVeryUsefulAspect {
@Around("@annotation(Authenticate)")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
if( isAuthenticated() ) {
return pjp.proceed();
} else {
return /* Oh no what goes here, I want to render a FAILURE page without redirecting */
}
}

}

最佳答案

哈,想通了!

我决定使用传递给方面方法的 ProceedingJoinPoint 来找出原始方法的返回类型。然后我根据传递的返回类型为方面方法制作了一组可能的“失败”结果。例如,如果该方法最初返回一个字符串,则返回“failure_page”,如果该方法返回一个 ModelAndView,则返回一个新的 ModelAndView("failure_page")。

效果很好!不幸的是,如果模型对象返回一个字符串并且不将 ModelMap 作为参数,我可能没有机会设置它,但是我可以很好地处理错误页面。

关于spring - Spring Controller 的 AOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com