2017-06-19 88 views
0

我试图为以下方式配置控制器的弹簧拦截器。首先,我想排除所有以/swagger开头的请求。我尝试按以下方式做:仅为控制器配置弹簧拦截器只有

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

但是,拦截器被解雇了。哪里出错?

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

感谢您的帮助!

回答

0

尝试使用"/swagger*/**""/swagger*"代替"/swagger**"

+0

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

0

我解决了以下方式问题:

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

PS还有一个笔记。如果您使用的是Swagger,您将遇到麻烦,因为Swagger会将此属性视为控制器方法参数。要忽略它,你可以使用下面的配置快照:

.ignoredParameterTypes(SomeObject.class);