过滤器Filter总结

导读:本篇文章讲解 过滤器Filter总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 简介

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

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

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

2. 快速入门

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

  1. 定义类:实现Filter接口(javax.servlet),并重写所有方法;
    在这里插入图片描述
    doFilter() 即核心方法,将来每次访问Filter都会执行;

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

  3. 在doFilter方法中输出 chain.doFilter(),并放行,让请求向后访问。
    在这里插入图片描述

3. 执行流程

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

  2. 【放行后】,请求访问完资源,r此时respond不为空,要对respond处理!
    在这里插入图片描述
    注意
    请求被放行后,访问完资源,而后还会倒回来经过Filter!此时会执行Filter中chain.doFilter() 后面的代码!

4. 使用细节

4.1 拦截路径

在这里插入图片描述

4.2 过滤器链

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

5. 案例

5.1 需求

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

在这里插入图片描述

5.2 LoginFilter

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

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

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

LoginFilter 所在位置:
在这里插入图片描述

LoginFilter
先判断访问路径是否为静态路径,是则放行;
在这里插入图片描述

而后判断用户是否登录,未登录则跳转login.jsp,反之放行;

注意
这里的request 未处理可以直接传入 chain.doFilter(),但如果对request处理过则要传入新的request;
在这里插入图片描述

效果:此时登陆页面的静态资源可以访问;
在这里插入图片描述

如果没有放行静态资源,会跳转到login.jsp并提示,但是缺少html、css等静态资源:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89152.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!