SpringBoot 的过滤器 Filter 配置的三种方式

Stella981
• 阅读 1296

SpringBoot 过滤器配置有三种方式

1. @ServletComponentScan + @WebFilter, 可配置过滤路径, 但没有顺序(顺序是由过滤器命名决定)

在启动类上使用 @ServletComponentScan, 在过滤器类上使用 @WebFilter(urlPatterns = {"/test/path"})

@SpringBootApplication
@ServletComponentScan
public class ServicemapServicecenterBackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServicemapServicecenterBackendApplication.class, args);
    }
}

@WebFilter(urlPatterns = {"/test"})
public class FilterTwo extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("************************** FilterTwo **************************");
        filterChain.doFilter(request, response);
    }

}

2. @Component + @Order(100), 不可配置过滤路径, 可以通过@Order配置顺序

在过滤器类上使用 @Component , @Order(100) 数值越小优先级越高

@Component
@Order(100)
public class FilterOne extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("************************** FilterOne **************************");
        filterChain.doFilter(request, response);
    }
}

3. @SpringBootConfiguration + @Order, 可配置过滤路径, 可以通过@Order配置顺序, 也可以在代码中setOrder(100)配置 (推荐方式)

@Order(100)
public class FilterOne extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("************************** FilterOne **************************");
        filterChain.doFilter(request, response);
    }
}

@SpringBootConfiguration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<FilterOne> filterOneRegister() {
        FilterRegistrationBean<FilterOne> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new FilterOne());
        filterRegistrationBean.addUrlPatterns("/*");
//        filterRegistrationBean.setOrder(100);
        return filterRegistrationBean;
    }
}
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springcloud gateway高级功能之根据参数自定义路由Predicate
背景我们使用了springcloudgateway作为也给路由转发功能,由于历史遗留问题,不仅仅需要根据path转发,还需要根据get或者post中的参数进行转发解决方案这里我们使用自定义的Predicate进行转发简介这里简单介绍下相关术语(1)Filter(过滤器):和Zuul的过滤器在概念上类似,可以使
Easter79 Easter79
3年前
SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
一简介(1)过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等关于
Stella981 Stella981
3年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Stella981 Stella981
3年前
Eclipse搭建springboot项目(八)拦截器、过滤器、监听器
知识点:1、SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter(核心知识)  filter简单理解:人检票员(filter)景点  1)SpringBoot启动默认加载的Filter    characterEncodingFilter    
Easter79 Easter79
3年前
SpringBoot学习之路:09.Spring Boot中添加Filter应用
   上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现一.编写MyFilter实现Filter接口packagecom.maxbill.core.webbox.filter;importorg.apache.log4j
Wesley13 Wesley13
3年前
Spring MVC 自带的字符编码过滤器以及Tomcat字符编码设置,彻底解决中文参数乱码问题
一、SpringMVC字符编码配置javaWeb项目添加Spring支持后,可使用Spring自带的字符编码过滤器。源码在springweb4.1.0.RELEASE.jar包下的org.springframework.web.filter目录的CharacterEncodingFilter.java。在web.xml文件中配置:
Stella981 Stella981
3年前
HBase
1过滤器HBase的基本API,包括增、删、改、查等。增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。1.1过滤器的两类参数过滤器可
Stella981 Stella981
3年前
Flask基础(14)
Flask基础(13)自定义过滤器什么是过滤器?    过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用Python中的某些方法,那么这就用到了过滤器。使用方式:过滤器的使用方式为:变量名|过滤器。
Stella981 Stella981
3年前
SpringBoot过滤器中的异常处理
在昨天的文章我跟大家分享了SpringBoot中异常的处理中,我说了一个需要注意的点,就是过滤器中抛出的异常无法被异常处理类捕获,然后这个朋友就问应该如何处理。其实处理这种问题的处理方式有好几种,那么我就简单分享一下我近期一个项目中的处理方式。Filter中的异常处理思路首先我们要明白,在过滤器中我们一般是不会写很长
Easter79 Easter79
3年前
SpringBoot过滤器中的异常处理
在昨天的文章我跟大家分享了SpringBoot中异常的处理中,我说了一个需要注意的点,就是过滤器中抛出的异常无法被异常处理类捕获,然后这个朋友就问应该如何处理。其实处理这种问题的处理方式有好几种,那么我就简单分享一下我近期一个项目中的处理方式。Filter中的异常处理思路首先我们要明白,在过滤器中我们一般是不会写很长