MVC Java Config - HandlerInterceptor 不排除路径

2022-09-04 21:40:35

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

在标有 xxx 的行中,如果

1) 我将两者都添加到 's 中,根本没有被调用。例如addPatterns("/**")excludePathPatterns("*.ecxld")HandlerInterceptorInterceptorRegistrationHandlerInterceptor.preHanlde().addPathPatterns("/**").excludePathPatterns("*.ecxld")

2) 我只添加到 's ,仍然执行。excludePathPatterns("*.ecxld")HandlerInterceptorInterceptorRegistrationHandlerInterceptor.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()
     );

 }

答案 1

您为包含和排除指定的模式是 ant 基路径表达式,而不是普通的 URL 表达式,例如,在 web 中.xml来映射 servlet 或过滤器。

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

您当前的表达式将匹配,但它不会匹配甚至不匹配。该部分负责处理此事。但是,要使其工作,还需要一个(代码检查是否存在一个 当没有它时,它忽略了 )。*.ecxldfile.ecxld/file.ecxld/foo/file.ecxld/**/includePathExpressionincludePathExpressionexcludePathExpression

因此,简而言之,将您的配置更改为以下内容应该可以解决您的问题。

@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()
     );

 }

答案 2

我知道这是很久以前的事了,但我只是偶然发现了同样的问题。在我的搜索过程中,我找到了以下博客。其中提到,如果拦截器配置为bean,它们将自动添加到链中。我现在正在使用Spring 4.1.x,所以可能会有差异,但对我来说解决它的是以下几点:

  1. (我试图避免将它们定义为春豆。它没有帮助。
  2. 我将拦截器配置为弹簧豆(所以我可以将东西自动连接到它们中,看到这里)
  3. 我更改了我的定义如下:

    registry.addInterceptor(getMyHandlerInterceptor()) .addPathPatterns(“/**”) .excludePathPatterns(“/user/login”);

通过将 addPathPatterns 放在 excludePathPatterns 之前,拦截器的行为突然工作正常。


推荐