弹簧基座拦截器:获得控制器&方法名称

时间:2016-01-14 15:14:16

标签: java spring spring-mvc spring-boot

我正在尝试创建一个拦截器,它将使我的视图可以使用当前控制器名称和操作(方法)名称。这似乎在大多数情况下都很有用。

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登录时。当发生这种情况时,我得到一个代理包装器作为控制器名称。有没有办法获得实际的控制器名称?

  

发布$$ EnhancerBySpringCGLIB $$ 3ef51261

2 个答案:

答案 0 :(得分:4)

这适用于获取控制器名称,如果您使用的是弹簧安全性。

controllerName = handlerMethod.getBeanType()。getSimpleName()。replace(" Controller","");

答案 1 :(得分:0)

不确定但您可以从RequestMappingHandlerMapping获取信息。只需在拦截器中自动装配RequestMappingHandlerMapping并调用getHandler方法