产业园门户网站建设方案,瑞昌网络推广,杭州百度seo,苏州广告公司排名前20在 Java Web 开发中#xff0c;拦截器#xff08;Interceptor#xff09;和过滤器#xff08;Filter#xff09;是两种常见的请求处理机制#xff0c;它们用于对请求和响应进行预处理和后处理 1. 过滤器#xff08;Filter#xff09;
1.1 作用
Filter 主要用于对 请求… 在 Java Web 开发中拦截器Interceptor和过滤器Filter是两种常见的请求处理机制它们用于对请求和响应进行预处理和后处理 1. 过滤器Filter
1.1 作用
Filter 主要用于对 请求request 和 响应response 进行预处理和后处理通常用于请求日志记录、编码设置、安全检查等场景
1.2 工作原理
Filter 作用于 Servlet 之前对请求进行预处理处理完请求后Filter 也可以对响应进行后处理通过 FilterChain 将请求传递给下一个 Filter 或 Servlet
1.3 实现步骤
实现 javax.servlet.Filter 接口重写 doFilter 方法在 web.xml 中进行配置或者使用 WebFilter 注解
1.4 示例代码
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;WebFilter(/*) // 作用于所有请求
public class MyFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println(Filter: 请求被拦截);chain.doFilter(request, response); // 继续请求System.out.println(Filter: 响应被拦截);}
}2. 拦截器Interceptor
2.1 作用
Interceptor 主要用于 拦截控制器Controller的执行在方法执行前后或视图渲染前执行特定逻辑如权限控制、日志记录、事务管理等
2.2 工作原理
Interceptor 依赖 Spring MVC拦截的是 Controller 的执行过程可以在**方法调用前preHandle、方法调用后postHandle、视图渲染后afterCompletion**执行逻辑
2.3 实现步骤
实现 HandlerInterceptor 接口重写 preHandle、postHandle、afterCompletion 方法在 Spring 配置中注册拦截器
2.4 示例代码
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(Interceptor: 进入 Controller 前);return true; // 继续执行 Controller 方法}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(Interceptor: 方法执行完毕);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(Interceptor: 视图渲染完成);}
}2.5 拦截器的注册
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration
public class InterceptorConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns(/**);}
}3. 过滤器与拦截器的对比
比较项过滤器Filter拦截器Interceptor作用范围作用于 所有请求包括静态资源作用于 Spring MVC 控制器依赖Servlet 规范Spring MVC触发时机在 Servlet 之前 处理请求在 Controller 执行前后 处理请求适用场景编码设置、日志记录、权限控制认证授权、日志、事务处理处理方式doFilter 方法preHandle、postHandle、afterCompletion
4. 总结
Filter 适用于所有请求包括静态资源可以用于通用的请求预处理和后处理Interceptor 仅拦截 Controller 方法适用于控制器层面的拦截如权限控制、事务管理在 Spring Boot 应用中一般推荐使用 Interceptor 来拦截业务逻辑而使用 Filter 处理通用的请求逻辑