仅此而已丶。 2023-01-25 10:53 采纳率: 100%
浏览 9
已结题

Spring Boot如何配置Filter?

自定义好了过滤器当然要使其在Spring Boot中生效了,该如何配置呢?

  • 写回答

4条回答 默认 最新

  • 仅此而已丶 2023-01-25 11:51
    关注

    1、配置类中使用@Bean注入【推荐使用】
    其实很简单,只需要将 FilterRegistrationBean 这个实例注入到IOC容器中即可,如下:

    @Configuration
    public class FilterConfig {
    @Autowired
    private Filter1 filter1;
    @Autowired
    private Filter2 filter2;
    /**
    * 注入Filter1
    * @return
    */
    @Bean
    public FilterRegistrationBean filter1() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(filter1);
    registration.addUrlPatterns("/*");
    registration.setName("filter1");
    //设置优先级别
    registration.setOrder(1);
    return registration;
    }
    /**
    * 注入Filter2
    * @return
    */
    @Bean
    public FilterRegistrationBean filter2() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(filter2);
    registration.addUrlPatterns("/*");
    registration.setName("filter2");
    //设置优先级别
    registration.setOrder(2);
    return registration;
    }
    }
    

    注意:设置的优先级别决定了过滤器的执行顺序。
    2、使用@WebFilter
    @WebFilter 是Servlet3.0的一个注解,用于标注一个Filter,Spring Boot也是支持这种方式,只需要在
    自定义的Filter上标注该注解即可,如下:

    @WebFilter(filterName = "crosFilter",urlPatterns = {"/*"})
    public class CrosFilter implements Filter {
    //重写其中的doFilter方法
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws
    IOException, ServletException {
    //继续执行下一个过滤器
    chain.doFilter(req, response);
    }
    }
    

    要想 @WebFilter 注解生效,需要在配置类上标注另外一个注解 @ServletComponentScan 用于扫描使其生
    效,如下:

    
    ```java
    @SpringBootApplication
    @ServletComponentScan(value = {"com.example.springbootintercept.filter"})
    public class SpringbootApplication {}
    

    至此,配置就完成了,启动项目,即可正常运行。

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 1月25日