MVC Java Config - HandlerInterceptor不排除路径

sol*_*ind 13 java spring-mvc spring-3

我有一个MVC Java配置,但HandlerInterceptor不排除某些模式.

在标有xxx的行上,如果

1)我同时添加addPatterns("/**")excludePathPatterns("*.ecxld")HandlerInterceptorInterceptorRegistration时,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)

M. *_*num 9

您为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)

  • 谢谢你的评论.我试过这个.但它仍然不排除preHandle的路径.ps添加模式的方法是`.addPathPatterns()` (2认同)

sol*_*ind 0

调试后,拦截器并没有按照添加的顺序执行。在上面的示例中,先执行interceptorOne,然后执行interceptorTwo,然后执行处理程序(具有排除的模式)。