как получить имя метода контроллера в методе preHandle Spring Interceptor - PullRequest
3 голосов
/ 05 декабря 2011

В моем приложении, основанном на Spring MVC и Spring Security, я использую аннотацию @Controller для настройки контроллера.

Я настроил Перехватчик Spring Handler и в методе preHandle() яхочу получить имя метода, который будет вызываться перехватчиком.

Я хочу получить пользовательскую аннотацию, определенную для метода контроллера в preHandle() методе HandlerInterceptor, чтобы я мог управлять, регистрируя действия для этого конкретногоМетод.

Пожалуйста, ознакомьтесь с требованиями моего приложения и кодом

@Controller
public class ConsoleUserManagementController{
@RequestMapping(value = CONSOLE_NAMESPACE + "/account/changePassword.do", method = RequestMethod.GET)
@doLog(true)
public ModelAndView showChangePasswordPage() {
    String returnView = USERMANAGEMENT_NAMESPACE + "/account/ChangePassword";
    ModelAndView mavChangePassword = new ModelAndView(returnView);
    LogUtils.logInfo("Getting Change Password service prerequisit attributes");
    mavChangePassword.getModelMap().put("passwordModel", new PasswordModel());
    return mavChangePassword;
}
}

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   // here I want the controller method name(i.e showChangePasswordPage() 
   // for /account/changePassword.do url ) to be called and that method annotation 
   // (i.e doLog() ) so that by viewing annotation , I can manage whether for that 
   // particular controller method, whether to enable logging or not.
}

Я использую SPRING 3.0 в своем приложении

1 Ответ

2 голосов
/ 05 декабря 2011

Не знаю о перехватчике Handler, но вы можете попробовать использовать Аспекты и создать общий перехватчик для всех ваших методов контроллера.

Используя аспекты, было бы легко получить доступ к имени вашего метода точки соединения.

Вы можете внедрить объект запроса в ваш аспект или использовать:

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

Чтобы получить его из вашего метода совета.

Например:

@Around("execution (* com.yourpackages.controllers.*.*(..)) && @annotation(org.springframework.web.bind.annotation.RequestMapping)")
public Object doSomething(ProceedingJoinPoint pjp){
 pjp.getSignature().getDeclaringType().getName();
}
...