SpringBoot基础篇(五)过滤器Filter(原生)

2024-08-28 19:08

本文主要是介绍SpringBoot基础篇(五)过滤器Filter(原生),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       过滤器Filter是出于客户端与服务器资源文件之间的一道过滤网。web开发人员通过Filter技术管理web服务器的所有资源,如jsp、servlet、静态图片文件或静态html文件等进行拦截,从而实现一些功能。如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

【注意】javax.servlet.Filter原生过滤器SpringBoot对其再次封装。

1、Filter接口源码说明

package javax.servlet;
import java.io.IOException;
public interface Filter {
//过滤器初始化,init方法只会执行一次public void init(FilterConfig filterConfig) throws ServletException;
//执行过滤器public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException;
//过滤器销毁public void destroy();}

    Filter的创建和销毁由Web服务器负责。Web应用程序启动时,Web服务器将创建Filter的实例对象,并调用其init()方法,读取web.xml配置,完成对象的初始化功能,从而为后续用户请求做好拦截的准备工作(Filter对象只会创建一次,init方法只会执行一次)。开发者通过init方法的参数可获得代表当前filter配置信息的FilterConfig 对象。

     当客户请求访问与过滤器关联的URL时,过滤器先将执行doFilter方法。FilterChain参数用于访问后续过滤器。Filter对象创建后会驻留内存中,当web应用移除或服务器停止时才销毁。在Web容器卸载Filter对象之前,destroy被调用。该方法在Filter的生命周期中仅执行一次,destroy方法可以释放过滤器使用的资源。

   Filter可以有很多个,一个个Filter组合起来就形成了一个FilterChain过滤器链。FilterChain过滤器链的执行顺序遵循先进后出的原则:当web客户端发送一个Request请求时,这个Request请求会经过FilterChain,由它利用dofilter()方法调用各个子Filter,至于子filter的执行顺序如何,则看客户端如何制定规则的。

2、Filter过滤器应用

【实现Filter接口】注意@WebFilter

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(filterName = "",urlPatterns = "/*")
public class UserFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("---------UserFilter初始化----------->>");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("---------UserFilter执行过滤操作----------->>");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {System.out.println("---------UserFilter销毁----------->>");}
}

【启动类配置@ServletComponentScan】

@SpringBootApplication
@ServletComponentScan
public class ShApp 
{protected final static Logger logger = LoggerFactory.getLogger(ShApp.class);	public static void main(String[] args) {ApplicationContext ctx =SpringApplication.run(ShApp.class, args);		}
}

3、过滤器中注解@WebFilter/@ServletCompnentScan

【@WebFilter注解】

@WebFilter注解:用于将一个类声明为过滤器,@WebFilter注解将会应用部署时被容器处理,容器根据具体的属性将相应的类部署为过滤器。在Web应用中使用监听器时,不需要在web.xml文件中配置监听器的相关描述信息。@WebFilter注解注解的属性有filterName、urlPatterns、value等。

(1)filterName属性用指定过滤器的name,等价于<filter-name>标签;

(2)urlPatterns属性用于指定一组过滤器的URL匹配模式,等价于xml配置文件中的<url-patten>标签;

  (3)value属性等价于urlPatterns属性,不可与urlPatterns属性同时使用。

【@ServletCompnentScan注解】

@ServletCompnentScan注解,使用该注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,不需要其他代码。

 

这篇关于SpringBoot基础篇(五)过滤器Filter(原生)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115626

相关文章

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ