什么是过滤器?为什么要使用过滤器?

发布时间:2026/5/20 6:00:08

什么是过滤器?为什么要使用过滤器? 1.过滤器的定义用于对请求和响应进行预处理和后处理的组件。响应前处理在请求到达目标资源之前执行。响应后处理在响应离开目标资源之后执行。2.过滤器的意义1.进行日志记录例如import javax.servlet.*; import java.io.IOException; public class LoggingFilter implements Filter { Override public void init(FilterConfig filterConfig) { // 可以用来初始化一些资源 } Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long startTime System.currentTimeMillis(); // 继续处理请求 chain.doFilter(request, response); long endTime System.currentTimeMillis(); // 日志打印 System.out.println(Request processed in (endTime - startTime) ms); } Override public void destroy() { // 释放资源 } }2.用户认证例如你在访问淘宝的时候点击支付商品会提示你未进行登录会跳转到登录界面登录后才可继续访问。这就是用户认证。3.请求参数验证例如请求打到过滤器上验证请求参数是否合适合适就可访问否则不可访问。就是系统不需要参数为但是验证参数为就不让访问。4.跨域资源共享 (CORS)现在的项目几乎为前后端分离保证项目的可扩展性易于维护等此时需要考虑的就是跨域问题在项目中进行域名过滤筛选出自己运行的域名项目为可访问同时避免了其他项目也就是其他域名的请求项目进行数据的访问3.如何创建过滤器1. 实现Filter接口要创建一个过滤器需要实现javax.servlet.Filter接口并重写其主要方法。Filter接口有三个主要方法init(FilterConfig filterConfig): 初始化方法在过滤器创建后调用用于初始化过滤器。doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 核心方法在请求到达目标资源之前和响应离开目标资源之后被调用。可以在此方法中对请求和响应进行操作。destroy(): 销毁方法在过滤器销毁之前调用用于释放资源2.配置过滤器在配置文件中配置或者导入对应的包启用过滤器即导包后编译工具才认识过滤器。3.过滤器/拦截器客户端请求 → [过滤器1 → 过滤器2 → ...] → Servlet容器 → [Spring的DispatcherServlet] → [拦截器1 → 拦截器2 → ...] → 控制器方法 → [返回视图/数据] → [拦截器2后处理 → 拦截器1后处理] → [过滤器2后处理 → 过滤器1后处理] → 响应返回客户端你的逻辑需要作用在所有请求上包括静态资源吗→用过滤器。你的逻辑需要依赖 Spring 的功能如依赖注入、AOP吗→用拦截器。你需要在控制器方法执行前后做精细控制吗→用拦截器。你需要修改请求或响应的原始内容如压缩、编码吗→用过滤器。你做的是与 HTTP 协议本身相关的底层处理吗→用过滤器。

相关新闻