Функциональность Spring AOP довольно велика, и она позволяет легко добавлять интересные и полезные аннотации на контроллеры.Например, я написал аннотацию @Authenticated, которая либо позволяет аутентифицированным пользователям проходить через метод контроллера, либо перенаправляет на страницу входа.Забавные вещи.
Однако контроллеры Spring могут возвращать всевозможные типы.Они могут возвращать Strings, ModelAndView объекты или даже void.В моей базе кода есть методы, которые используют все три типа.Однако я хотел бы изменить мою аннотацию @Authenticated для отображения и возврата определенной страницы, что я и надеялся сделать, возвращая объект ModelAndView.Это единственный способ сделать это, требуя, чтобы все мои методы контроллера возвращали ModelAndView?
Пример контроллера, который я хотел бы получить:
@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 */
}
}
}