如何在Spring Interceptor preHandle方法中获取控制器方法名称

时间:2011-12-05 11:54:29

标签: spring-mvc annotations interceptor

在我的基于spring mvc和spring security的应用程序中,我使用@Controller注释来配置控制器。

我已经配置了 Spring Handler Interceptor ,并且在preHandle()方法中,我希望获得将被拦截器调用的方法名称。

我希望在preHandle()的{​​{1}}方法中获取在控制器方法上定义的自定义注释,以便我可以通过记录该特定方法的活动进行管理。

请查看我的申请要求和代码

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;
}
}

我在我的应用程序中使用SPRING 3.0

1 个答案:

答案 0 :(得分:2)

不了解Handler拦截器,但您可以尝试使用Aspects并为所有控制器方法创建一般拦截器。

使用方面,可以轻松访问您的joinpoint方法名称。

您可以在方面中注入请求对象或使用:

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();
}