应用场景
- 过滤非法请求
- 记录请求日志
- 设置请求编码
Filter介绍
- Filter是Servlet的加强版,主要用于对用户请求进行预处理,对HttpServletResponse进行后处理。
- Filter的处理流程是:Filter对请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对响应进行后处理。
- Filter在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest;根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据;在HttpServletResponse到达客户端之前,拦截HttpServletResponse;根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
Filter使用
- 创建Filter处理类。
- web.xml文件中配置Filter。
示例代码:
public class HttpHeaderSecurityFilter implements Filter{
private FilterConfig config;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>cn.org.platform.filter.HttpHeaderSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
它和Servlet的配置相似,也可以配置索所要过滤的URL,也可以配置参数。示例代码:
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>cn.org.platform.filter.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
public class HttpHeaderSecurityFilter implements Filter{
......
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
String encoding = config.getInitParameter("encoding");
req.setCharacterEncoding(encoding);
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
chain.doFilter(request, response);
}
......
}
Filter方法
- init方法:用于完成Filter的初始化。
- destory方法:用于Filter销毁前,完成某些资源的回收。
- doFilter方法:实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
- Filter随web应用的启动而启动,初始化一次,当web应用停止或重新部署的时候销毁。
- Filter可拦截多个请求或响应;一个请求或响应也可被多个Filter拦截,多个Filter时的调用顺序与在web.xml中的前后顺序一致。
Interceptor与Filter
Filter是javax.servlet包中的一个接口。
Interceptor是Spring MVC框架的一部分。
Interceptor和Filter都是AOP编程思想的体现。
参考资料:
- https://www.cnblogs.com/junzi2099/p/8022058.html
- 《Java EE 企业应用实战 第4版》