Filter过滤器的使用

2021-09-22

------------恢复内容开始------------

Filter 过滤器的使用

1、过滤器需要实现 implements Filter

2、属于Servlet规范,实现Filter接口,需要实现Filter接口,需要实现其中的三个方法

  • init( )   初始化方法
  • doFilter( )  放行,
  • destroy()  销毁,结束

3、过滤器的配置和Servlet的配置类似,在web.xml只需要将Servlet修改filter

 

 <filter>
        <filter-name>HelloFilter</filter-name>
        <filter-class>com.kong.filter.HelloFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HelloFilter</filter-name>
        <url-pattern>/*【过滤范围】</url-pattern>
    </filter-mapping>
    <filter>

 4、当设置成拦截/*,就是拦截所有的请求,因此会被Filter拦截,并执行其中的方法,其中必须在doFilter中实现放行操作:chain.doFilter(request,response),否则过滤器不会放行,S0ervlet中收不到任何请求。

所有

chain.doFilter(request,response)成为了一条分界线,分界线前一部分的请求是拦截Filter执行,分界线后面的代码即将响应给客户端执行

5、顺序问题:如果设置了web.xml配置文件,就按照配置的maping顺序执行,如果是注解方式配置,就按照全类名【包名+类名】排序的顺序。

6、 过滤器的生命周期和Servlet的生命周期类似:

 - 实例化         一次
 - 初始化 : init()         一次
 - 服务 : doFilter()     多次
 - 销毁 : destroy()     一次

7、过滤器的匹配规则

  •  精确匹配:   /hello.do :拦截/hello.do的请求  拦截/xxx的 请求
  • 模糊匹配:   *.xx   : 拦截以*.xx结尾的请求    /* :拦截所有的请求

 8、给过滤器配置初始化参数

  • xml方式
  • 在filter注解后面,在注解<filter-mapping></filter-mapping>后面添加:
    <filter>
             <init-param>
                 <param-name>parameter</param-name>
                 <param-value>value</param-value>
             </init-param>
    </filter>

     

  • 注解方式
  • 1 在Filter类的头顶设置注解,并配置初始化参数,设置注解就不需要设置xml,二者不能冲突,重新重加载 。
    2 @WebFilter(urlPatterns
    3  ={"/*"}, initParams = {@WebInitParam(name="encoding",
    4 value = "GBK")} )
    注解方式
    1 在Filter类头上设置注释,并初始化参数 ,不能和xml同时设置,会导致重加载。
    2 实例代码:
    3 @WebFilter(urlPatterns 
    4 = {"/*"},initParams = {@WebInitParam(name="parameter",
    5 value = "value")})

     个人理解【新手】 :拦截器就是为了匹配自己是否能访问该页面,条件去判断,当不满足条件是无法调转该页面,条件达成时可以通过拦截器到达该页面。例如在网页登录成功后可以访问更多界面,路人未登录时无法进入一些界面,例如:支付界面,付费页面等

 

 

 

 

------------恢复内容结束------------