filter的简单介绍
filter,过滤器,顾名思义,就是起到一个对来访者进行筛选过滤的功能
在访问之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。
最常见的有两种
- 对用户状态进行筛选,例如,一些页面,没有登录的游客状态,不允许访问,会跳转到登录界面
- 对某些资源文件的访问权限进行筛选,没有该文件的下载权限的,拒绝访问
除此之外,也可以对响应进行过滤,拦截或修改响应,设置编码、通过session进行属性过滤。
下面介绍下filter的配置过程:
- 创建filter.java
建议新手通过ide直接创建filter,这样会直接在web.xml中添加响应的配置
filter命名一般为filters.XxxFilter.java
创建好filter后,会在.java文件中生成init()、doFilter()、destroy()三个方法,也代表了一个filter的一个执行过程。其中,init()和destroy()均只执行一次,一般的过滤方法都会放在doFilter中。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
User user = HrmUserVarify.getUser (request , response) ;
if("1".equals(user.getUID())){
chain.doFilter(req,resp);
}
}
2.配置web.xml
- 对某个文件进行请求过滤:
-
2. 对某类文件进行过滤<filter> <filter-class>weaver.filters.MyFilter</filter-class> <filter-name>myFilter</filter-name> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/test/new.jsp</url-pattern> </filter-mapping>
<filter-mapping>
<filter-name>ECompatibleFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
3.对某个目录下的所有文件进行配置
-
<filter-mapping> <filter-name>XssFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
4.对某个请求进行过滤
<filter-mapping>
<filter-name>XssFilter</filter-name>
<url-pattern>/log/*</url-pattern>
</filter-mapping>
经过上边两步,一个filter已经完成配置了,下面是配置多个filter的情况
3.多个filter的情况
一个filter可以配置多个filter-mapping,表示对多种请求进行过滤
例:
在web.xml中,配置两个filter,对同一jsp页面进行拦截过滤
-
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/test/new.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>myFilter2</filter-name> <url-pattern>/test/new.jsp</url-pattern> </filter-mapping>
得到如下的结果
-
<!-- Connected to server --> MyFilter2 init MyFilter init <!-- visit server --> MyFilter doFilter MyFilter2 doFilter <!-- end close the server --> MyFilter2 destroy MyFilter destroy <!-- Disconnected from server-->
最后要知道的是,进入filter的先后顺序与mapping的配置的先后顺序有关,而与filter的配置的先后顺序无关