Filter过滤器

Filter过滤器是JavaWeb的三大组件之一。它是JavaEE的一个接口,作用是:拦截请求,过滤响应。比较常见的应用场景有:权限检查、日记操作、事务管理等。

Filter的使用

当服务器端端收到客户端的请求时,先通过Filter过滤器检查对于要访问的资源是否有权限,如果有权限,程序就默认继续执行,如果没有权限,就跳转到其他界面进行提示。比如要进入后台管理界面,先检查是否登录,如果未登录跳到登录界面,登录了就默认进入后台管理界面。

1
2
3
4
5
6
7
8
9
10
11
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
User loginUser = (User) httpServletRequest.getSession().getAttribute("user");
if(loginUser==null){
httpServletRequest.getRequestDispatcher("/pages/user/login.jsp").forward(servletRequest,servletResponse);
}else{
//放行,必须加上这句才继续进行正常动作
filterChain.doFilter(servletRequest,servletResponse);
}
}

使用步骤

  1. 编写一个类实现Filter接口。
  2. 实现过滤方法doFilter()。
  3. 在web.xml中配置Filter程序拦截的路径。

web.xml关于Filter的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<filter>
<filter-name>ManagerFilter</filter-name>
<filter-class>com.atguigu.filter.ManagerFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ManagerFilter</filter-name>
<!--拦截路径,要访问这些都要经过Filter过滤-->
<url-pattern>/pages/manager/*</url-pattern>
<url-pattern>/manager/bookServlet</url-pattern>
</filter-mapping>

配置基本和Servlet一样,<url-pattern>可以有多个,即可以过滤多个访问地址。

Filter生命周期

  1. 构造器方法
  2. init初始化方法。//前两个在web工程启动时就执行,Filter已经创建。
  3. doFilter过滤方法。//每次拦截到请求就会执行。
  4. 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的拦截路径

Author

叶润繁

Posted on

2022-01-23

Licensed under