SpringBoot注册Filter的两种实现方式
作者:user_MzerKbEl 发布时间:2023-01-01 10:26:05
springboot版本:2.2.5
一、filter注册
springboot中添加filter有两种方式:
1、实现方法一
package com.example.demo.filter1;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.stereotype.Component;
/**
* Springboot实现filter的方式一:
* 实现Filter接口,并使用@Component注解
* 需要注意的是:这个方式注册的filter的执行顺序优先级较低
* @author Administrator
*
*/
@Component
public class FilterSample1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("这里是"+this.getClass().getName()+"的init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("这里是"+this.getClass().getName()+"的doFilter");
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("这里是"+this.getClass().getName()+"的doFilter");
}
}
2、实现方法二
package com.example.demo.filter2;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FilterSample2 implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("这里是"+this.getClass().getName()+"的doFilter");
chain.doFilter(request,response);
}
}
package com.example.demo.filter2;
import java.util.ArrayList;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Springboot注册filter方法二:
* 同样要实现filter接口,但filter注册使用@Bean的方式进行注册,可以设置filter顺序
* @author Administrator
*
*/
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<FilterSample2> filterSample2() {
FilterRegistrationBean<FilterSample2> registrationBean = new FilterRegistrationBean<FilterSample2>();
FilterSample2 myFilter = new FilterSample2();
registrationBean.setFilter(myFilter);
ArrayList<String> urls = new ArrayList<>();
urls.add("/*");//配置过滤规则
registrationBean.setUrlPatterns(urls);
registrationBean.setOrder(3);
return registrationBean;
}
}
二、Springboot自带filter
Springboot默认启用了三个filter,他们是requestContextFilter,characterEncodingFilter,formContentFilter,可以通过在application.yml中设置debug: true来验证如下:
2020-03-17 22:13:17.254 DEBUG 2700 --- [ main] o.s.b.w.s.f.OrderedRequestContextFilter : Filter 'requestContextFilter' configured for use
2020-03-17 22:13:17.255 DEBUG 2700 --- [ main] s.b.w.s.f.OrderedCharacterEncodingFilter : Filter 'characterEncodingFilter' configured for use
2020-03-17 22:13:17.255 DEBUG 2700 --- [ main] o.s.b.w.s.f.OrderedFormContentFilter : Filter 'formContentFilter' configured for use
三、查看应用中注册了哪些filter
#application.yml
debug: true
如上图,启用debug模式,查看日志可得:
标蓝部分详细内容如下:
2020-03-17 22:13:17.244 DEBUG 2700 --- [ main] o.s.b.w.s.ServletContextInitializerBeans :
Mapping filters:
filterRegistrationBean urls=[/*] order=3,
characterEncodingFilter urls=[/*] order=-2147483648,
formContentFilter urls=[/*] order=-9900,
requestContextFilter urls=[/*] order=-105,
filterSample1 urls=[/*] order=2147483647
可以看出,该应用注册了五个filter,执行顺序由order决定
来源:https://segmentfault.com/a/1190000023501017


猜你喜欢
- java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对
- /// <summary> /// 通过IP得到IP所在地省市(Po
- 简介Java注解是JDK1.5引入的一种注释机制,它不会改变编译器的编译方式,Java编译器对包含注解和不包含注解的代码会生成相同的Java
- Android 开发的程序员开发程序的时候,一定为log而苦恼过吧。Eclipse老是Log找不到,是不是很让人不爽,虽然Android S
- 前言本文主要演示一个普通 java 项目导入IDEA的流程步骤及可能出现的问题、原因及解决办法。本文使用的部分软件版本如下:IDEA 201
- 前言SpringCloud 是微服务中的翘楚,最佳的落地方案。Spring Cloud Config 是一个解决分布式系统的配置管理方案,它
- 我们开始今天的正文。首先,来看一下今天分享的并发编程最佳学习路线包含哪些内容。最佳学习路线接下来,我们再来依次看下具体要学习哪些知识吧。并发
- 前言该篇介绍的内容如题,就是利用redis实现接口的限流( 某时间范围内 最大的访问次数 ) 。正文 惯例,
- 前言众所周知,encache是现在最流行的java开源缓存框架,配置简单,结构清晰,功能强大。通过注解 @Cacheable 可以快速添加方
- 目录重入锁1. 实现重进入2. 公平与非公平获取锁的区别读写锁1. 接口示例2. 读写状态的设计3. 写锁的获取与释放4. 读锁的获取与释放
- Java 用反射设置对象的属性值实例详解/** * 用反射设置对象的属性值 * @param obj 需要設置值的對象 * @param f
- 红黑树红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树,也是技术面试中经常被问到的树,然而无论是书上还是网上的资料,通常都比较刻板难
- dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式
- 很多时候我们用HTML布局会更方便直接,记录一下。我现在主要是直接调用服务器的网页(实际上是jsp的,只是返回的是html),所以需要联网,
- 实例如下所示:public class MainActivity {private static final String fileName
- 一、前言 接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢
- 前言 图片加水印:Springboot 图片需要添加水印,怎么办? 1秒就实现那么word文档替换文字、插入图片,当然也是1秒钟了
- Spring Cloud Gateway 服务网关API 主流网关有NGINX、ZUUL、Spring Cloud Gateway、Link
- 目录基于Java的guava开源库工具类1、guava的maven配置引入 2、LoadingCache3、Multimap 和
- 什么是Java类库在编写程序的时候,通常有很多功能是通用的,或者是很基础的,可以用这些功能来组成更发杂的功能代码。比如文件操作,不同程序对文