Java Filter

五、  Java Filter

1.  Java Filter 简介

* Java Filter
1. Java Filter(即:Java 过滤器):它能够对目标资源的请求或响应进行截取,即对服务器接受的请求资源或响应给浏览器的资源进行截取,通常用于拦截 Request 请求
2. 在 Web 项目中可以有多个 Java 过滤器
3. 应用场景:
a.统一设置编码格式
b.Session 管理
c.权限管理,如:访问权限控制等
d.资源管理,如:敏感字符过滤等
4. 生命周期:从服务器启动直到关闭

* Filter 的使用
1. 在 web.xml 中配置过滤器:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.ncdx.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:
a.url-pattern:/* 表示拦截所有的请求:
b.url-pattern:*.do 表示拦截所有以 ".do" 结尾的请求,一般进行模块拦截处理
c.url-pattern:url 表示拦截指定 url 的请求。针对指定的 Servlet 进行拦截处理,可以实现对 Servlet 的保护

2.  创建一个实现 Filter 接口的 Java 类,复写接口方法:
1)public void init (FilterConfig filterConfig) throws ServletException;
a.服务器启动即执行,资源初始化
2)public void doFilter (ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException;
a.拦截资源的方法体,在此方法中可以对目标资源进行处理
b.调用放行方法:chain.doFilter(req, resp);
3)public void destroy();
a.服务器关闭即执行

* Java 过滤器的工作原理如下图所示:
1. 客户端发起请求到服务器,服务器接收到请求后,根据 URI 信息在 web.xml 中找到对应的过滤器执行 doFilter() 方法
2. doFilter() 方法对此次请求处理后如果符合要求则调用 chain.doFilter(req, resp); 放行
3. 放行后如果还有符合要求的过滤器则继续进行过滤,直到被对应的 Servlet 处理
4. Servlet 完成对请求的处理后,也就是 service() 方法结束后,还需要继续返回到相应的 doFilter() 方法中执行
5. 最后,把处理结果响应给客户端

2.  Java 过滤器实例

/**
 * 利用 Java 过滤器统一设置编码格式
 */
public class FlowerFilter implements Filter{ @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //设置请求编码格式 req.setCharacterEncoding("utf-8"); //设置响应编码格式 resp.setContentType("text/html;charset=utf-8"); //放行 chain.doFilter(req, resp); } } /* 在 web.xml 中的配置如下:*/ <filter> <filter-name>myFilter</filter-name> <filter-class>com.ncdx.filter.myFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
原文地址:https://www.cnblogs.com/IT-LFP/p/11690766.html