MVC Java Config – HandlerInterceptor不排除路径

前端之家收集整理的这篇文章主要介绍了MVC Java Config – HandlerInterceptor不排除路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个MVC Java配置,但是HandlerInterceptor不排除一些模式.

在标有xxx的行上,如果

1)我将addPatterns(“/ **”)和excludePathPatterns(“*.ecxld”)添加到HandlerInterceptor的InterceptorRegistration中,HandlerInterceptor.preHanlde()根本不被调用.例如.addPathPatterns(“/ **”).excludePathPatterns(“*.ecxld”)

2)我只将excludePathPatterns(“*.ecxld”)添加到HandlerInterceptor的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()
     );

 }

解决方法

您为包含和排除指定的模式是ant base path expressions,而不是正常的URL表达式,您将在web.xml中表达,以映射servlet或过滤器.

要排除工作,您还必须包括一个包含路径(正如您已经注意到第二个注释).接下来,将排除模式更改为/**/*.ecxld.

您当前的表达式* .ecxld将匹配file.ecxld,但它不匹配/file.ecxld或甚至/foo/file.ecxld. / ** /部分负责.但是为了使其工作,它还需要一个includePathExpression(代码checks,如果没有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()
     );

 }

猜你在找的Java相关文章