我正在测试Spring AOP框架,并且有以下问题。
我有以下代码:
package danny.test.controllers; @Controller public class MyController{ @Autowired private DaoService service; @RequestMapping(value="/save",method = RequestMethod.POST) public String addUser(@Valid MyClass myClass, BindingResult result){ service.save(myClass); return "Ok"; }
我想在“建议之前”方面创建以检查用户会话中的用户安全性。
@Aspect public class Profiler { @Pointcut("execution(* danny.test.services.DaoServices.*.*(..))") public void methods(){} @Before("methods()") public void checkSecurity() throws Throwable{ //check session if user is authenticated.... } }
我不知道该怎么办,如果用户未通过身份验证,则取消DaoServices.save方法的执行,并导致控制器返回任何其他值而不是“ ok”。
我可以做吗?有人可以指出我的例子吗?我可以使用@Around建议进行此类操作吗?
是的,我认为您应该使用@Around建议,并且ProceedingJoinPoint.proceed()如果身份验证失败,则不要调用该方法。
ProceedingJoinPoint.proceed()
更新:
要返回其他内容,您的方法应如下所示:
@Before("methods()") public Object checkSecurity(ProceedingJoinPoint pjp) throws Throwable{ if (/*user is authenticated*/) { return pjp.proceed(); } else { return "NOT OK"; } }
请注意,该方法返回一个对象。另请参阅Spring 文档的这一部分。