【Java】 Filter

Metadata

title: 【Java】 Filter
date: 2023-02-01 18:51
tags:
  - 行动阶段/完成
  - 主题场景/程序
  - 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
  - 细化主题/Java
categories:
  - Java
keywords:
  - Java
description: 【Java】 Filter

【Java】 Filter

​ Filter(过滤器)用于拦截用户请求,在服务器作出响应前,可以在拦截后修改 request 和 response。可以实现一次编码,多处应用。Filter 不像 Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。

Web 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源。例如实现 URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。例如对 Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

Filter 主要的作用有两个:

  • 拦截修改请求:在 HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest。根据需要检查 HttpServletRequest,也可以修改 HttpServletRequest 头和数据。
  • 拦截修改响应:在 HttpServletResponse 到达客户端之前,拦截 HttpServletResponse。根据需要检查 HttpServletResponse, 也可以修改 HttpServletResponse 头和数据。

生命周期

Filter 接口位于 javax.servlet 包下,其中提供了三个方法,完成了整个过滤器的生命周期。

  • init() :应用程序启动时,servlet 容器就会调用 init 方法。这个方法只调用一次,并且应该包含该过滤器的初始化代码。
  • doFilter:每次的访问请求如果符合拦截条件都会调用此方法,获取请求及响应对象,自定义处理逻辑。
  • destroy():服务终止时,会调用 destory 方法,销毁过滤器对象。
public interface Filter {

    public default void init(FilterConfig filterConfig) throws ServletException {}

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException;

    public default void destroy() {}
}