Spring MVC + Перед советом проверьте безопасность - PullRequest
2 голосов
/ 05 февраля 2011

Я тестирую инфраструктуру 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....
    }

}

Что я не знаю, что делать, так это отменить выполнение метода DaoServices.save, если пользователь не аутентифицирован, и заставить контроллер вернуть любое другое значение вместо «ok».

Могу ли я это сделать?Может кто-нибудь указать мне на такой пример?Можно ли использовать @Around advice для таких действий?

1 Ответ

5 голосов
/ 05 февраля 2011

Да, я думаю, вам следует использовать совет @Around и просто не вызывать метод ProceedingJoinPoint.proceed() в случае сбоя аутентификации.

ОБНОВЛЕНИЕ:

Для возвратачто-то еще ваш метод должен выглядеть примерно так:

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

Обратите внимание, что метод возвращает объект.См. Также эту часть документации Spring .

...