Filter工作原理与生命周期
Filter是Java Servlet规范的核心组件,采用典型的责任链设计模式。每个Filter通过doFilter方法对请求进行拦截处理,并借助FilterChain参数将控制权传递给下一个过滤器或目标资源。其生命周期由Web容器管理,包含初始化(init)、执行(doFilter)和销毁(destroy)三个阶段。
常见应用场景与实战示例
身份验证:拦截未登录请求并重定向到登录页
日志记录:记录请求参数、响应时间和异常信息
编码转换:统一设置请求和响应的字符编码
跨域处理:实现CORS跨域资源共享支持
以下是跨域处理Filter的完整实现:
@WebFilter("/*")
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers",
"Content-Type, Authorization");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void destroy() {}
}
通过合理运用Filter,开发者可以优雅地实现横切关注点分离,构建更加健壮和可维护的Web应用程序。
2万+

被折叠的 条评论
为什么被折叠?



