文章目录
- 一、初识过滤器
- 二、Filter的生命周期
- 三、FilterChain过滤器链
一、初识过滤器
Filter过滤器是JavaWeb的三大组件之一,三大组件分别是:Servlet程序、LIstener监听器、Filter过滤器;
Filter过滤器是JavaEE的规范,也就是接口;
Filter过滤器它的作用是:拦截请求,过滤响应;
- 编写一个过滤器类继承Filter类
- 实现过滤方法都Filter()
- 在doFilter方法中拦截请求,可以作权限检查
- 可以在web.xml中或者直接使用@WebFilter注解进行拦截路径的设置;
WebFilter("/*")
public class Filter1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
if(user=null){//转发
servletRequest.getRequestDispatcher("/login.jsp").forward(request,response)
return;
}
else{//放行
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
二、Filter的生命周期
FIlter的生命周期包含的几个方法:
- 构造器方法
- Init初始化方法
第1,2步在web项目启动的时候执行(Filter已创建) - doFilter过滤方法
每次拦截到请求,就会执行 - destory销毁
停止web工程的时候,就会执行,也会销毁Filter过滤器
FilterConfig类:
FilterConfig类是Filter过滤器的配置文件类。
Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了FIlter配置文件的配置信息;
FilterConfig类的作用是获取filter过滤器的配置内容:
- 获取Filter的名称filter-name的内容
//在init初始化方法中:
filterConfig.getFilterName()
- 获取web.xmlr中配置的init-param初始化参数
filterConfig.getInitParameter(web.xml中的init-name名称)
- 获取ServletContext对象
filterConfig.getServletContext()
三、FilterChain过滤器链
FilterChain,就是过滤器链(多个过滤器链如何一起工作)
FilterChain.doFilter()方法的作用:
- 执行下一个Filter过滤器(如果有Filter过滤器)
- 执行目标资源(如果没有Filter)
在多个Filter过滤器执行的时候,他们的执行顺序是按他们在web.xml文件中从上到下的配置的顺序来决定的;
多个Filter过滤器执行的特点:
1. 所有的FIlter和目标资源默认都执行在同一线程中
2. 多个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只关心请求的地址是否匹配,而不关心请求的资源是否存在;