Filter

0x01 Filter First Shoot

  1. 引入servlet依赖

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>9.0.20</version>
    </dependency>
  2. 自定义过滤器

package filters;

import javax.servlet.*;
import java.io.IOException;

public class MyFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("My Filter is initializing");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter Start");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("doFilter End");
    }

    public void destroy() {
        System.out.println("My Filter is destroyed");
    }
}
  1. 注册过滤器(web.xml)

过滤器其实是一个链式结构,称为filterChain,FilterChain.doFilter()会调用下一个Filter的doFilter方法 直到最后一个Filter将调用目标 Servlet.service()方法。所以只要中间某个Filter没有调用doFilter方法, Servlet.service()就不会执行

0x02 Create Filter Memory Shell

org.apache.catalina.core.StandardContext#filterStart

注册Filter分两步:

Ⅰ. 从filterDefs(HashMap)中拿出一个FilterDef(Entry) Ⅱ. 传入FilterDef实例化ApplicationFilterConfig,放入filterConfigs

0x03 POC

Last updated

Was this helpful?