【问题标题】:Spring MVC + Before Advice check securitySpring MVC + Before Advice 检查安全性
【发布时间】:2011-02-05 13:22:00
【问题描述】:

我正在测试 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";
}

我想在 Advice 方面创建以检查用户会话中的用户安全性。

@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....
    }

}

如果用户未通过身份验证并导致控制器返回任何其他值而不是“ok”,我不知道该怎么做是取消 DaoServices.save 方法的执行。

我可以吗? 有人可以指出这样的例子吗? 我可以将@Around 建议用于此类操作吗?

【问题讨论】:

  • 我只是好奇,你为什么不使用 Spring Security 来做这件事?

标签: java spring spring-mvc jakarta-ee aspectj


【解决方案1】:

是的,我认为您应该使用@Around 建议,如果身份验证失败,则不要调用ProceedingJoinPoint.proceed() 方法。

更新:

要返回其他内容,您的方法应如下所示:

@Before("methods()")
public Object checkSecurity(ProceedingJoinPoint pjp) throws Throwable{
    if (/*user is authenticated*/) {
        return pjp.proceed();
    } else {
        return "NOT OK";
    }
}

请注意该方法返回一个对象。另请参阅 Spring documentation 的这一部分。

【讨论】:

  • 是的,谢谢,我自己也找到了 :) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-03-03
  • 2015-10-21
  • 2012-05-11
  • 2015-03-05
  • 1970-01-01
  • 2014-01-02
  • 2013-08-21
  • 2021-06-24
相关资源
最近更新 更多