02 Filter过滤器

Filter

一、Filter过滤器

  • Filter过滤器它是JavaWeb的三大组件之一。三大组件分别是:Servlet程序、Listener监听器、Filter过滤器

  • Filter过滤器是JavaEE的规范。也就是接口

  • Filter过滤器作用:拦截请求,过滤响应。

  • 拦截请求常见的应用场景有:

    • 权限检查
    • 日记操作
    • 事务管理
      ...

二、Filter初体验

image-20200916101955843

  • Filter过滤器的使用步骤:

    • 1、编写一个类去实现Filter 接口

    • 2、实现过滤方法doFilter()

      //AdminFilter.java
      
      Httpsession session = httpservletRequest.getsession();
      object user = session.getAttribute("user");
      HttpservletRequest httpservletRequest = (HttpServletRequest) servletRequest;
      
      //如果等于null,说明还没有登录
      if (user == null) {
          servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
      	return;
      } 
      else{
      	//让程序继续往下访问用户的目标资源
      	filterchain.doFilter(servletRequest,servletResponse);
      )
      
    • 3、到web.xml中去配置Filter的拦截路径

      <!-- web.xml -->
      
      <!--filter标签用于配置一个Filter过滤器-->
      <filter>
      	<!--给fiLter起一个别名-->
      	<filter-name>AdminFilter</filter-name>
      	<!--配置filter的全类名-->
      	<filter-class>com.atguigu.filter.AdminFilter</filter-class>
      </filter>
      
      <!--filter-mapping配置FiLter过滤器的拦截路径-->
      <filter-mapping>
      	<!--filter-name表示当前的拦截路径给哪个filter使用-->
      	<filter-name>AdminFilter</filter-name>
      	<!-- url-pattern配置拦截路径表示请求地址为: http://ip:port/工程路径/映射到IDEA的web目录
      		 admin/*表示请求地址为: http://ip:port/工程路径/ admin/* 
      	-->
      	<url-pattern>/admin/*</url-pattern>
      </filter-mapping>
      

三、Filter的生命周期

  • Filter的生命周期包含几个方法
    • 1、构造器方法
    • 2、init初始化方法
      第1,2步,在web工程启动的时候执行(Filter已经创建)
    • 3、doFilter过滤方法
      第3步,每次拦截到请求,就会执行
    • 4、destroy销毁
      第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

四、FilterConfig类

  • FilterConfig类见名知义,它是Filter过滤器的配置文性类。

  • Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了Filter配置文件的配置信息。

  • FilterConfig类的作用是获取filter过滤器的配置内容

    • 1、获取 Filter的名称filter-name的内容

      filterConfig.getFilterName()
      
    • 2、获取在Filter中配置的init-param初始化参数

      //事先要在web.xml中配置
      filterConfig.getInitParameter("...")
      
    • 3、获取ServletContext对象

      filterConfig.getServletContext()
      

五、FilterChain过滤器链

image-20200916135346184

六、Filter的拦截路径

  • 三种拦截方式

    • 精准匹配

      <ur1-pattern> /admin/jackyfu.html</url-pattern>
      
    • 目录匹配

      <url-pattern> /admin/*</url-pattern>
      
    • 后缀名匹配

      <ur1-pattern> *.html</url-pattern>
      
  • Filter过滤器只关心请求的地址是否匹配,而不关心请求的资源是否存在。

原文地址:https://www.cnblogs.com/nojacky/p/13905986.html