sol*_*ind 13 java spring-mvc spring-3
我有一个MVC Java配置,但HandlerInterceptor不排除某些模式.
在标有xxx的行上,如果
1)我同时添加addPatterns("/**")和excludePathPatterns("*.ecxld")对HandlerInterceptor的InterceptorRegistration时,HandlerInterceptor.preHanlde()是不是在所有调用.例如.addPathPatterns("/**").excludePathPatterns("*.ecxld")
2)我只添加excludePathPatterns("*.ecxld")到HandlerInterceptor's InterceptorRegistration,HandlerInterceptor.preHanlde()仍然执行.
(其他拦截器被调用很好).
任何指针赞赏.
谢谢
@Configuration
public class MyMVCConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(final InterceptorRegistry registry) {
registry.addInterceptor(getInterceptorOne());
registry.addInterceptor(getMyHandlerInterceptor())
.excludePathPatterns("*.ecxld"); // **xxx**
registry.addInterceptor(getInterceptorTwo()
);
}
Run Code Online (Sandbox Code Playgroud)
您为include和exclude指定的模式是ant基础路径表达式,而不是正常的URL表达式,就像您在web.xml中表示以映射servlet或过滤器一样.
要进行排除工作,您还必须包含一个包含路径(正如您在第二次注释时已经注意到的那样).接下来将排除模式更改为/**/*.ecxld.
您当前的表达式*.ecxld会匹配,file.ecxld但它不匹配/file.ecxld甚至不匹配/foo/file.ecxld.该/**/部分负责这一点.然而,为了使它工作,它还需要一个includePathExpression(代码检查是否存在includePathExpression何时忽略它excludePathExpression).
因此,简而言之,将配置更改为以下内容可以解决您的问题.
@Configuration
public class MyMVCConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(final InterceptorRegistry registry) {
registry.addInterceptor(getInterceptorOne());
registry.addInterceptor(getMyHandlerInterceptor())
.includePathPatterns("/**")
.excludePathPatterns("/**/*.ecxld");
registry.addInterceptor(getInterceptorTwo()
);
}
Run Code Online (Sandbox Code Playgroud)