过滤器Filter总结

过滤器Filter

    • 1. 简介
    • 2. 快速入门
    • 3. 执行流程
    • 4. 使用细节
      • 4.1 拦截路径
      • 4.2 过滤器链
    • 5. 案例
      • 5.1 需求
      • 5.2 LoginFilter

1. 简介

过滤器是JavaWeb三大组件之一(Servlet、Filter,Listner);

作用
把对资源(servlet、jsp、html等)的请求拦截下来,从而实现一些特殊的功能;
权限控制统一编码处理敏感字符处理等;

:在每一个资源中判断用户是否登录!如果没有登录则不能访问资源!—在Filter中去判断是否登录!

2. 快速入门

Filter和Servlet是JavaWeb的三大组件之一,使用方法和Servlet类似;

  1. 定义类:实现Filter接口(javax.servlet),并重写所有方法;
    过滤器Filter总结_第1张图片
    doFilter() 即核心方法,将来每次访问Filter都会执行;

  2. 配置:在类上定义 @WebFilter,然后配置Filter拦截的资源路径,注解:
    /* 即拦截所有资源;
    在这里插入图片描述

  3. 在doFilter方法中输出 chain.doFilter(),并放行,让请求向后访问。
    过滤器Filter总结_第2张图片

3. 执行流程

  1. 【放行前】,对request数据进行处理,respond为空,将新的request传入doFilter();

  2. 【放行后】,请求访问完资源,r此时respond不为空,要对respond处理!
    过滤器Filter总结_第3张图片
    注意
    请求被放行后,访问完资源,而后还会倒回来经过Filter!此时会执行Filter中chain.doFilter() 后面的代码!

4. 使用细节

4.1 拦截路径

过滤器Filter总结_第4张图片

4.2 过滤器链

一个Web应用,可以配置多个过滤器,这多个过滤器被称为过滤器链;
当配置了多个Filter时,执行的优先级按照过滤器类名(字符串)自然排序;
过滤器Filter总结_第5张图片
注意执行顺序! 过滤器1放行后执行过滤器2;
访问完资源后,先回到过滤器2再执行过滤器1;

5. 案例

5.1 需求

  1. 访问服务器资源时,需要先进行登录验证,如果没有登录则被Filter 拦截,跳转到登录页面;
    如果登录过了,则放行
  2. 登陆相关的静态页面(css、html)要能够被访问,而**不被拦截! **

过滤器Filter总结_第6张图片

5.2 LoginFilter

如果请求是静态页面的url,则后序判断(是否用户登录)则不需要执行!

  1. 要让和登陆相关的静态资源放行,先用String [] 数组记录下这些静态资源;
  2. getRequestURL() 获取当前访问的资源路径;
  3. 判断当前访问的资源中 是否包含之前记录的要放行的等静态资源,如果包含则直接放行并return,不再判断是否登录;

判断是否是静态资源,是则放行再return !

LoginFilter 所在位置:
过滤器Filter总结_第7张图片

LoginFilter

判断是否登录:
过滤器Filter总结_第8张图片

效果:此时登陆页面的静态资源可以访问;
过滤器Filter总结_第9张图片

如果没有放行静态资源,会跳转到login.jsp并提示,但是缺少html、css等静态资源:
过滤器Filter总结_第10张图片

你可能感兴趣的:(JavaWeb,servlet,java,前端)