首页 > 解决方案 > Servlet 过滤器应用了两次

问题描述

我有一个暴露其余端点的 Spring Boot 应用程序,在项目内部有一个应用过滤器的库:

@Component
@Order(1)
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {}

它工作正常,但我发现了一个奇怪的行为。每当我的库(带有过滤器的库)对另一个休息服务进行远程调用(我这样做是为了根据响应评估某些逻辑),当该服务返回响应时,在返回之前,再次应用过滤器,并且当然,我不希望这种行为。

我 100% 确定这是导致第二次调用过滤器的原因,因为如果我省略其余调用,则过滤器仅应用一次。

标签: spring-bootfiltering

解决方案


使用 FilterRegistrationBean

@Bean
public FilterRegistrationBean<MyFilter> loggingFilter(){
    FilterRegistrationBean<MyFilter> registrationBean 
      = new FilterRegistrationBean<>();
         
    registrationBean.setFilter(new MyFilter());
    registrationBean.addUrlPatterns("/users/*");
         
    return registrationBean;    
}

推荐阅读