SpringBoot项目中filter的两种使用详解
一、添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
二、@WebFilter方式
@WebFilter(filterName = "myFilter",urlPatterns = "/*")
@Slf4j
@Order(value = 2) //存在多个filter时 指定filter执行顺序
public class MyFilter02 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("=======过滤器初始化2=======");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
log.info("过滤器2:请求的sessionID为{},请求的url为{}",httpServletRequest.getSession().getId(),httpServletRequest.getRequestURL());
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
@SpringBootApplication
@ServletComponentScan
public class SpringBootFiltrApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootFiltrApplication.class,args);
}
}
启动类中@ServletComponentScan注解和@WebFilter注解配合使用,@ServletComponentScan注解会自动扫描带有@WebFilter注解的类
三、@Bean注解方式
先自定义一个过滤器:
@Slf4j
public class MyFilter01 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("=====初始化过滤器1======");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
log.info("过滤器1:请求路径:{}",httpServletRequest.getRequestURL());
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
将自定义的过滤器加载到ioc容器中
@Configuration
public class AddFilters {
@Bean
public FilterRegistrationBean addFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter01());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
上面可以看出,通过两种方式分别创建了filter01和filter02两个过滤器,并分别指定了他们执行的顺序
三、测试
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/getUserInfo")
public String getUserInfo(){
return "获取成功";
}
}
启动项目:访问http://localhost:8080/user/getUserInfo
查看控制台打印的结果:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法
这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-12-12
SpringBoot整合ip2region实现使用ip监控用户访问城市的详细过程
这篇文章主要介绍了SpringBoot整合ip2region实现使用ip监控用户访问城市,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-07-07
Java参数校验详解之使用@Valid注解和自定义注解进行参数验证
在后端开发中,参数校验是非常普遍的,下面这篇文章主要给大家介绍了关于Java参数校验详解之使用@Valid注解和自定义注解进行参数验证的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-06-06
使用Backoff策略提高HttpClient连接管理的效率
这篇文章主要为大家介绍了Backoff策略提高HttpClient连接管理的效率使用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10


最新评论