过滤器的实现

作者: CodingHou | 来源:发表于2017-02-14 21:25 被阅读153次

Filter过滤器API

Servlet过滤器API包含了3个接口,它们都在javax.servlet包中,分别是Filter接口、FilterChain接口和FilterConfig接口。
Filter接口(源码)

public interface Filter {

        public void init(FilterConfig filterConfig) throws ServletException;
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
    
        public void destroy();
}

所有的过滤器都要实现Filter接口,该接口定义了init(),doFilter(),destory()三个方法。

1.init(FilterConfig filterConfig)

  • 在web应用程序启动时,web服务器将根据web.xml中的配置信息来创建每个注册的filter实例对象,并将其保存在服务器的内存中。
  • Web中创建Filter实例之后立即调用该Filter的init()方法。init()方法在Filter生命周期中只执行一次。
  • Web容器在调用init方法时,会传递一个包含Filter配置和运行环境的FilterConfig对象。利用FilterConfig对象可以获得ServletContext对象,以及部署描述中配置的过滤器的初始化参数。

2.doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

  • doFilter()方法类似于Servlet接口的Service方法;
  • 当客户端请求目标资源的时候,容器就会调用与这个目标资源相关过滤器的doFilter()方法。其中参数 request, response 为 web 容器或 Filter 链的上一个 Filter 传递过来的请求和相应对象;参数 chain 为代表当前 Filter 链的对象。
  • 特定操作完成后,可以在当前 Filter 对象的 doFilter 方法内部需要调用 FilterChain 对象的 chain.doFilter(request,response)方法才能把请求交付给 Filter 链中的下一个 Filter 或者目标 Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及 HttpServletResponse的sendRedirect()方法将请求转向到其他资源。这个方法的请求和响应参数的类型是 ServletRequest和ServletResponse,也就是说,过滤器的使用并不依赖于具体的协议。

3. public void destory()

  • 在web容器卸载Filter对象之前被调用。
  • 该方法在Filter生命周期中只执行一次,通过这个方法可以释放过滤器使用的资源。

FilterChain接口

public interface FilterChain {
    public void doFilter(ServletRequest request, ServletResponse response)      
                throws IOException, ServletException;
}
  • 此方法是由Servlet容器提供给开发者的,用于对资源请求过滤链的依次调用,通过FilterChain调用过滤链中的下一个过滤 器,如果是最后一个过滤器,则下一个就调用目标资源。

FilterCOnfig接口

public interface FilterConfig {

  //返回web.xml部署文件中定义的该过滤器的名称
    public String getFilterName();
    
  //返回调用者所处的servlet上下文
    public ServletContext getServletContext();
    
  //返回过滤器初始化参数值的字符串形式,当参数不存在时,返回nul1.name是初始化参数名
    public String getInitParameter(String name);
    
  //以Enumeration形式返回过滤器所有初始化参数值,如果没有初始化参数,返回为空
    public Enumeration getInitParameterNames();
}

相关文章

  • 自定义 logback 日志过滤器

    Logback 提供两种类型的过滤器,常规过滤器和turbo过滤器。本例讲述基于常规过滤器的自定义实现。 常规过滤...

  • Java Web 过滤器

    过滤器的工作原理 过滤器的生命周期 过滤器链 Web项目中多个过滤器实现,多个过滤器对应同一个路近执行顺序如何? ...

  • 拦截器和过滤器

    拦截器和过滤器功能很相似 拦截器和过滤器的区别 过滤器 过滤器filter,自己都是实现filter接口,然后do...

  • Interceptor和Filter区别

    过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的...

  • 过滤器 - 拦截器 - 监听器

    过滤器 拦截器 监听器 过滤器 实现 实现Filter类,然后重写它的3个方法: init 方法 : 在容器中创建...

  • Java 过滤器(Filter)

    一、什么是过滤器 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类!过滤器的执行流程: 从...

  • Zuul的内置过滤器详解(源码解析)

    从技术角度来说,Zuul的的核心就是一系列的过滤器。这些过滤器都实现了ZuulFilter接口。 Zuul的过滤器...

  • kata05:布隆过滤器

    这次kata的内容:实现一个布隆过滤器 布隆过滤器 (Bloom Filter) 什么是布隆过滤器呢?简单来说, ...

  • JavaWeb基础之Filter

    编写一个过滤器 实现Filter接口 配置拦截的URL路径:在web.xml中填写 过滤器的常见应用 实现用户登录...

  • Spring Cloud Zuul过滤器详解

    过滤器类型与请求生命周期 Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器...

网友评论

    本文标题:过滤器的实现

    本文链接:https://www.haomeiwen.com/subject/mtjfwttx.html