【问题标题】:Configure Spring interceptor for controllers only仅为控制器配置 Spring 拦截器
【发布时间】:2017-06-19 11:21:50
【问题描述】:

我正在尝试仅通过以下方式为控制器配置 Spring 拦截器。首先,我想排除所有以/swagger 开头的请求。我尝试通过以下方式进行:

registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/swagger**");

但是,拦截器被触发。哪里有错?

也许,@ControllerAdvice 有一个替代解决方案。但是我需要获取请求标头,所以我想它不符合我的需求。

感谢您的帮助!

【问题讨论】:

    标签: java spring spring-mvc model-view-controller


    【解决方案1】:

    尝试使用"/swagger*/**""/swagger*" 而不是"/swagger**"

    【讨论】:

    • 我尝试了第二种方法,但它不起作用。第一个也是,我刚试过。我用另一种方式解决了我的问题。
    【解决方案2】:

    我通过以下方式解决了这个问题:

    @ControllerAdvice
    public class SomeAdvice {
    
        @ModelAttribute
        public void token(HttpServletRequest request) {
            // getting headers and setting the attribute in the request
            request.setAttribute("theAttribute", new SomeObject());
        }
    }
    

    然后我以这种方式在控制器中获取请求属性:

    public void someMethod(@RequestAttribute("theAttribute") SomeObject someObject) {
        // some logic goes here
    }
    

    附:还有一个注意事项。如果您使用Swagger,您将遇到麻烦,因为Swagger 会将此属性视为控制器方法参数。要忽略它,您可以使用以下配置快照:

    .ignoredParameterTypes(SomeObject.class);
    

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2017-06-15
      • 1970-01-01
      • 2018-03-31
      • 2018-08-09
      • 2018-06-24
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多