我正在尝试创建一个拦截器,该拦截器将使当前控制器名称和操作(方法)名称可用于我的视图。在大多数情况下,这似乎效果很好。
public class BaseInterceptor extends HandlerInterceptorAdapter {
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
String controllerName = "";
String actionName = "";
if( handler instanceof HandlerMethod ) {
// there are cases where this handler isn't an instance of HandlerMethod, so the cast fails.
HandlerMethod handlerMethod = (HandlerMethod) handler;
controllerName = handlerMethod.getBean().getClass().getSimpleName().replace("Controller", "");
actionName = handlerMethod.getMethod().getName();
}
modelAndView.addObject("controllerName", controllerName );
modelAndView.addObject("actionName", actionName );
}
}
唯一不起作用的时间是当我使用Spring Security登录时。发生这种情况时,我得到一个代理包装作为控制器名称。有什么方法可以获取实际的控制器名称?
Post $$ EnhancerBySpringCGLIB $$ 3ef51261
最佳答案
无论是否使用spring security,这都可以获取控制器名称。
controllerName = handlerMethod.getBeanType()。getSimpleName()。replace(“Controller”,“”);