在阅读本文前,强烈建议大家先阅读前一篇
springboot|springboot配置拦截器

同样强烈建议先阅读官方文档:
https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#filters

https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/howto.html#howto-add-a-servlet-filter-or-listener

https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/spring-boot-features.html#boot-features-embedded-container

配置过滤器需要以下几步:

  1. 添加相关的依赖

  2. 配置过滤器Bean及相应的配置

  3. 编写相关的依赖

添加相关的依赖


同样,只需要引入web依赖就可以了

implementation 'org.springframework.boot:spring-boot-starter-web'

配置过滤器Bean及相应配置


添加过滤器的Bean代码如下

/** * 这里要注意两点,一个是 @WebFilter注解, 一个是实现了Filter接口 * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/@WebFilter("/test/*")public class TestFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        // 进行逻辑处理        System.out.println("in doFilter");        // 一定要记得这个,逻辑处理完之后,调用过滤器链,去进入到下一个过滤器        chain.doFilter(request,response);    }}

在Main函数类上的配置如下:

/** * 只需要在这里面加上一个@ServletComponentScan这个注解就可以了 */@SpringBootApplication@ServletComponentScanpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);  }}

用于测试的Controller代码:

/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/@RestControllerpublic class TestController {    @RequestMapping("test/testFilter")    public String testFilter(){        System.out.println("in test method");        return "";    }    @RequestMapping("pass/testPass")    public String testPass(){        System.out.println("in pass method");        return "";    }}

输出结果



引用第三方的过滤器


有种情况是jar包里面提供了第三方的过滤器,我们没有办法加WebFilter注解,这时候就要用另外一种方式添加了,如这里有个ThirdFilter:

/** * 这是一个第三方的Filter,只实现了Filter,没有添加WebFilter注解 * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/public class ThirdFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        // 进行逻辑处理        System.out.println("in ThirdFilter");        // 一定要记得这个,逻辑处理完之后,调用过滤器链,去进入到下一个过滤器        chain.doFilter(request,response);    }}

需要在Main函数的类里面添另一个Bean,把这个过滤器包装成一个Bean

/** * 只需要在这里面加上一个@ServletComponentScan这个注解就可以了 */@SpringBootApplication@ServletComponentScanpublic class DemoApplication {public static void main(String[] args) {    SpringApplication.run(DemoApplication.class, args);  }/**   * 把第三方的过滤器包装成一个Spring的Bean   * @return   */@Beanpublic FilterRegistrationBean thirdFilter() {    FilterRegistrationBean bean = new FilterRegistrationBean<>(new ThirdFilter());    bean.setName("ThirdFilter");    bean.addUrlPatterns("/test/*");    bean.setOrder(0);return bean;  }}

结果输出


DEMO总评


过滤器是WEB中的一大重要组件,和拦载器不同的是,过滤器是Servlet的组件,而拦截器是spring的组件. 过滤器会对所有的请求有效,如js,css这些,都会进到过滤器里面,所以我们常用过滤器进行字符转码,或者监控请求时间,登录等等. 加油吧,少年!!

©著作权归作者所有:来自51CTO博客作者mb5ffd6f53cf9c6的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Symfony的学习
  2. 【Nest教程】为项目增加个自定义过滤器
  3. php常量知识点的总结及过滤器的使用(1118)
  4. 如何在亿级数据中判断一个元素是否存在?
  5. 好用的 Android(安卓)数据库 DBFlow
  6. Dagger2 基础入门与使用
  7. ScrollView嵌套Linearlayout显示不全的解决办法
  8. Android(安卓)4.2一些变动
  9. AOP面向切面编程

随机推荐

  1. 如何在PHP中自动设置用户的语言环境?
  2. PHP常用的文件操作函数集锦
  3. 一些Apache、Php和Mysql的优化配置选项
  4. php的最快排序,放弃老师教的消耗大量资源
  5. Nginx 502报错(django+nginx,而非php-fmp
  6. 什么是客户端准备语句?
  7. 在PHP和MySQL中同时插入来自多个表单的多
  8. 关于php的命名空间
  9. 在解释语言上使用非常大的整数时,会产生意
  10. php 封装原生数据导出的方法