springboot @WebFilter注解过滤器的实现
作者:peng 发布时间:2023-07-06 11:14:54
标签:springboot,@WebFilter
@WebFilter注解过滤器
@WebFilter加在过滤器的注解上使用
import lombok.extern.slf4j.Slf4j;
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 javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
@Slf4j
public class WebFilterTest implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("WebFilterTest --- init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("WebFilterTest --- doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("WebFilterTest --- destroy");
}
}
@WebFilter源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFilter {
String description() default "";
/**Filter显示名*/
String displayName() default "";
/**配置参数*/
WebInitParam[] initParams() default {};
/**Filter名称*/
String filterName() default "";
String smallIcon() default "";
String largeIcon() default "";
/**指定对哪些Servlet进行过滤*/
String[] servletNames() default {};
/**指定拦截的路径*/
String[] value() default {};
/**指定拦截的路径*/
String[] urlPatterns() default {};
/**指定Filter对哪种方式的请求进行过滤*/
DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST};
/**指定Filter是否支持异步模式*/
boolean asyncSupported() default false;
}
在springBoot的启动类中加入注解:
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
多个@WebFilter注解的过滤器可以配合@Order()注解实现执行过滤的顺序
import org.springframework.core.annotation.Order;
@WebFilter(urlPatterns = "/*")
@Slf4j
@Order(1)
public class WebFilterTest implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("WebFilterTest --- init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("WebFilterTest --- doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("WebFilterTest --- destroy");
}
}
@WebFilter(urlPatterns = "/*")
@Slf4j
@Order(2)
public class WebFilterTest2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("2---WebFilterTest2 --- init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("2 --- WebFilterTest2 --- doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("WebFilterTest2 --- destroy");
}
}
执行结果
WebFilterTest --- doFilter
2 --- WebFilterTest2 --- doFilter
不使用注解的方式使用过滤器
创建过滤器类
public class WebFilterTest implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("WebFilterTest --- init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("WebFilterTest --- doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("WebFilterTest --- destroy");
}
}
注册过滤器
@Configuration
public class FilterConfig {
@Bean
public WebFilterTest webFilterTest(){
return new WebFilterTest();
}
@Bean
public FilterRegistrationBean filterRegist(){
FilterRegistrationBean frBean = new FilterRegistrationBean();
frBean.setFilter(webFilterTest());
frBean.setOrder(1);
frBean.addUrlPatterns("/*");
return frBean;
}
}
多个过滤器注册
再添加一个过滤器:
@Slf4j
public class WebFilterTest2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("2---WebFilterTest2 --- init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("2 --- WebFilterTest2 --- doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("WebFilterTest2 --- destroy");
}
}
修改配置类:
@Configuration
public class FilterConfig {
@Bean
public WebFilterTest webFilterTest(){
return new WebFilterTest();
}
@Bean
public WebFilterTest2 webFilterTest2(){
return new WebFilterTest2();
}
@Bean
public FilterRegistrationBean filterRegist(){
FilterRegistrationBean frBean = new FilterRegistrationBean();
frBean.setFilter(webFilterTest());
frBean.setOrder(1);
frBean.addUrlPatterns("/*");
return frBean;
}
@Bean
public FilterRegistrationBean filterRegist2(){
FilterRegistrationBean frBean = new FilterRegistrationBean();
frBean.setFilter(webFilterTest2());
frBean.setOrder(2);
frBean.addUrlPatterns("/*");
return frBean;
}
}
来源:https://segmentfault.com/a/1190000021912102


猜你喜欢
- 一、非配置文件注入1、注入普通字符串直接附在属性名上,在 Bean 初始化时,会赋初始值。@Value("admin")
- 继续我们的源码解析,上一篇文章我们介绍了Activity的启动流程,一个典型的场景就是Activity a 启动了一个Activity b,
- 前言虽然从学java的第一个程序——helloworld至今,已经有好几个年头了。当时自己找资料,看视频,学习了java的输入输出流,多线程
- Java Tess4J实现图像识别最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使
- 我在以前的博客中介绍了如何使用XmlDocument类对XML进行操作,以及如何使用LINQ to XML对XML进行操作。它们分别使用了X
- 一、 序列化和反序列化概念Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是
- ArrayList与Array的区别概述 ArrayList 是数
- OKhttp3中的cookiesOkHttpClient client = new OkHttpClient().newBuilder().
- 预览效果图:需要权限:<uses-permission android:name="com.android.launcher
- 一.有段时间没更了,因为一直在思索,应该写点什么,真的是无比纠结。这一回,就给大家分享一款简便好用的,小编自制的土晾时间轴。附上XML预览图
- Spring Security中也提供了默认的注销配置,在开发时也可以按照自己需求对注销进行个性化定制开启注销 默认开启package co
- 这篇文章主要介绍了JAVA内存溢出解决方案图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 本文实例讲述了Java编程调用微信分享功能。分享给大家供大家参考,具体如下:这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发
- Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。压缩方法使用的是可变参数,可以压缩1
- 简介 相信很多人都接触spring框架很长时间了,每次搭建spring框架的时候都需要配置好多的jar、xml,做很多繁琐重复的配置,稍微不
- 一、闭包的定义。有很多不同的人都对闭包过进行了定义,这里收集了一些。# 是引用了自由变量的函数。这个函数通常被定义在另一个外部函数中,并且引
- 上一篇中说到了 Expression 的一些概念性东西,其实也是为了这一篇做知识准备。为了实现 EFCore 的多条件、连表查询,简化查询代
- 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的1.接
- 这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 本文实例讲述了C#实现让ListBox适应最大Item宽度的方法。分享给大家供大家参考。具体实现方法如下:private void butt