Filter过滤器
Filter过滤器是JavaWeb的三大组件之一。它是JavaEE的一个接口,作用是:拦截请求,过滤响应。比较常见的应用场景有:权限检查、日记操作、事务管理等。
Filter的使用
当服务器端端收到客户端的请求时,先通过Filter过滤器检查对于要访问的资源是否有权限,如果有权限,程序就默认继续执行,如果没有权限,就跳转到其他界面进行提示。比如要进入后台管理界面,先检查是否登录,如果未登录跳到登录界面,登录了就默认进入后台管理界面。
1 |
|
使用步骤
- 编写一个类实现Filter接口。
- 实现过滤方法doFilter()。
- 在web.xml中配置Filter程序拦截的路径。
web.xml关于Filter的内容如下:
1 | <filter> |
配置基本和Servlet一样,<url-pattern>
可以有多个,即可以过滤多个访问地址。
Filter生命周期
- 构造器方法
- init初始化方法。//前两个在web工程启动时就执行,Filter已经创建。
- doFilter过滤方法。//每次拦截到请求就会执行。
- destroy摧毁方法。//停止web工程时会执行。
FilterConfig类
是Filter过滤器的配置文件类。Tomcat每次创建Filter时,就会同时创建一个FilterConfig类的对象,包含了Filter的配置信息。
- getFilterName():获取Filter的名称。
- getInitParameter():获取Filter中配置的init-param参数。
- getServletContext():获取ServletContext对象。
FilterChain过滤器链
- FilterChain.doFilter()方法:执行下一个Filter过滤器(如果还有Filter),执行目标资源(没有Filter)。
- 多个Filter程序的执行顺序是由它们在web.xml中的配置顺序决定的。
- 所有Filter和目标资源默认在同一个线程中。
- 多个Filter对象共同执行时,使用同一个request对象。
Filter的拦截路径
- 精确匹配:
<url-pattern>/target.jsp</url-pattern>
表示请求地址为http://ip:port/工程路径/target.jsp才会被拦截。 - 目标匹配:
<url-pattern>/admin/*</url-pattern>
表示请求地址为http://ip:port/工程路径/admin/下的资源才会被拦截。 - 后缀名匹配:
<url-pattern>*.html</url-pattern>
表示请求地址以.html结尾才会被拦截。这个后缀名也可以随意写,Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在。