Spring,Interceptor的excludePathPatterns函数无法正常工作

时间:2014-01-20 07:31:04

标签: java spring-mvc

我正在使用Spring Framework,我想编写一个拦截器,我最终编写了它并且工作正常。 但在某一点上,我不希望我的拦截器拦截用户想要注销并且会话失效的请求。但它并没有按照我的期望发生。

我通过扩展 WebMvcConfigurerAdapter 并使用 addInterceptors 方法添加拦截器,这里是代码。

public void addInterceptors(InterceptorRegistry registry) {
    super.addInterceptors(registry);
    registry.addInterceptor( loggerInterceptor );
    registry.addInterceptor( authenticationInterceptor ).excludePathPatterns("/invalidate");   
    }

我在这里做错了吗? excludePathPatterns - >我的网址以/ invalidate结尾。所以请指导我,如何设置正确的模式。

5 个答案:

答案 0 :(得分:6)

你试过如下吗?

@Configuration
@EnableWebMvc
public class MyWebConfig extends WebMvcConfigurerAdapter 
{
  @Override
  public void addInterceptors(InterceptorRegistry registry) 
  {
    registry.addInterceptor(new MyCustomInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/foo/**");
  }
}

Reference

请参阅此java doc以获得更好的理解。

答案 1 :(得分:0)

在我的情况下,我不得不调试整个Spring的FrameworkServlet,在某个地方,抛出了一个例外:“没有名为hashId的参数”。

原来我的requestParam没有被命名为hashId而是id,因此拦截器被正确地应用于该服务url路径。

确保excludedPattern以“/”开头,并且请求参数名称与控制器中定义的完全相同。

答案 2 :(得分:0)

我想也许你的代码会触发另一个错误,url路径改为另一个url(/ error等),然后是你没有排除的/ error url路径,请检查你的代码或调试断点为{{3} }

答案 3 :(得分:0)

我在实施类似要求时发现了同样的问题。如果您使用 Spring 5+ 版本,请在您的代码中尝试以下操作。

@Configuration
public class BasicInterceptorAppConfig implements **WebMvcConfigurer** {

    @Autowired
    YourCustomInterceptor yourCustomInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry){
        interceptorRegistry.addInterceptor(yourCustomInterceptor).addPathPatterns("/**").excludePathPatterns("/admin.html", "/swagger-ui.html");

    }

}

Spring 5+ 版本请使用 WebMvcConfigurer。希望这可以帮助正在寻找类似解决方案的人。

答案 4 :(得分:-1)

这是不必要的补充:

addPathPatterns("/**")

MappedInterceptor.java: