Filter
0x01 Filter First Shoot
引入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>自定义过滤器
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");
}
}注册过滤器(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?