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()仍然被执行.

(其他拦截调用正常).

任何指针赞赏.

谢谢

  1. @Configuration
  2. public class MyMVCConfigurerAdapter extends WebMvcConfigurerAdapter {
  3.  
  4. @Override
  5. public void addInterceptors(final InterceptorRegistry registry) {
  6.  
  7. registry.addInterceptor(getInterceptorOne());
  8.  
  9. registry.addInterceptor(getMyHandlerInterceptor())
  10. .excludePathPatterns("*.ecxld"); // **xxx**
  11.  
  12. registry.addInterceptor(getInterceptorTwo()
  13. );
  14.  
  15. }

解决方法

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

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

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

所以简单地说你的配置到以下应该可以解决你的问题.

  1. @Configuration
  2. public class MyMVCConfigurerAdapter extends WebMvcConfigurerAdapter {
  3.  
  4. @Override
  5. public void addInterceptors(final InterceptorRegistry registry) {
  6.  
  7. registry.addInterceptor(getInterceptorOne());
  8.  
  9. registry.addInterceptor(getMyHandlerInterceptor())
  10. .includePathPatterns("/**")
  11. .excludePathPatterns("/**/*.ecxld");
  12.  
  13. registry.addInterceptor(getInterceptorTwo()
  14. );
  15.  
  16. }

猜你在找的Java相关文章