一、Filter的工作流程分析

二、Filter 过滤器的使用步骤

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

1) Filter 的代码:

public class AdminFilter implements Filter {
/**
* doFilter 方法,专门用于拦截请求。可以做权限检查
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain
filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpSession session = httpServletRequest.getSession();
Object user = session.getAttribute("user");
// 如果等于 null,说明还没有登录
if (user == null) {
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
return;
} else {
// 让程序继续往下访问用户的目标资源,非常重要,如果没有这个就算有权限也无法访问
filterChain.doFilter(servletRequest,servletResponse);
}
}
}

2)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>

三、Filer的生命周期

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 的内容
  2. 获取在 Filter 中配置的 init-param 初始化参数
  3. 获取 ServletContext 对象

public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("2.Filter 的 init(FilterConfig filterConfig)初始化");
// 1、获取 Filter 的名称 filter-name 的内容
System.out.println("filter-name 的值是:" + filterConfig.getFilterName());
// 2、获取在 web.xml 中配置的 init-param 初始化参数
System.out.println("初始化参数 username 的值是:" + filterConfig.getInitParameter("username"));
System.out.println("初始化参数 url 的值是:" + filterConfig.getInitParameter("url"));
// 3、获取 ServletContext 对象
System.out.println(filterConfig.getServletContext());
}

五、FilterChain 过滤器链

 FilterChain 就是过滤器链(多个过滤器如何一起工作)

六、 Filter 的拦截路径

--精确匹配

/target.jsp 以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp

--目录匹配

/admin/* 以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*

--后缀名匹配

*.html 以上配置的路径,表示请求地址必须以.html 结尾才会拦截到

*.do 以上配置的路径,表示请求地址必须以.do 结尾才会拦截到

*.action 以上配置的路径,表示请求地址必须以.action 结尾才会拦截到

Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!

 

Filter过滤器(详解)相关推荐

  1. 【Servlet】Filter过滤器详解、使用示例

    Filter过滤器讲解 定义 过滤器处于浏览器与servlet之间,是一个实现了 javax.servlet.Filter 接口的 Java 类 客户端发送的请求.服务器发送的资源,需要通过过滤器,才 ...

  2. javaweb项目Filter过滤器详解

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  3. vue filter 过滤器 详解

    Vue.js 允许你自定义过滤器filter,可被用于一些常见的文本格式化. (注意vue版本号不同 用法也稍有不同) 接下来咱们就记录一下最常用的filter过滤器用法.(该示例以多个过滤器为例,当 ...

  4. logstash filter 过滤器详解

    一.grok 正则捕获插件 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据解析成结构化和方便查询的结构.是目前logstash 中解析非结构 ...

  5. HBase的布隆过滤器详解

    HBase的布隆过滤器详解 1.布隆过滤器的简单介绍 2.布隆过滤器的原理分析 2.1 哈希表存在的问题 2.2 布隆过滤器的原理 2.2.1 原理详解 2.2.2 布隆过滤器失误率的调节 2.2.3 ...

  6. JavaWeb中filter的详解及应用案例

    JavaWeb中filter的详解及应用案例 转载自:http://www.cnblogs.com/vanl/p/5742501.html 一:Filter介绍 Filter可认为是Servlet的一 ...

  7. android edittext 过滤英文名称,Android 限制edittext 整数和小数位数 过滤器(详解)

    写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码: package allone.verbank.apad.client.component; import android.t ...

  8. Photoshop CS 中的“照片滤镜/Photo Filter”命令详解(转)

    Photoshop CS 中的"照片滤镜/Photo Filter"命令详解(转)[@more@] 这是一个跟摄影有关的重要图像调整命令. 有关这一命令的教程,现在网上没一个能说得 ...

  9. 双边滤波(Bilateral Filter)详解

    双边滤波(Bilateral Filter)详解 转自:睁开眼就变帅 原理分析: 双边滤波与高斯滤波器相比,对于图像的边缘信息能过更好的保存.其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高 ...

  10. Java过滤器Filter使用详解

    <div id="post_detail"> 转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374212.html 在我的项目 ...

最新文章

  1. cannot connect to vCenter Single Sign-on server...
  2. Layui 数据表格, 取消全选
  3. ORM框架之Mybatis(四)MyBatis生成器,逆向工程生成实体类和SQL
  4. Facebook对memcached的提升
  5. Cygwin的进程管理
  6. 一个完整的爬虫入门程序
  7. matlab常用函数解释,MATLAB常用函数总结
  8. java中移动光标怎么写_java 程序当中无法做到光标跟随
  9. 英语作文 健康的重要性
  10. 数据库是根和数据仓库是魂
  11. matlab里impz指令格式,华北电力大学Matla实验指导书.doc
  12. 各种逆元求法 组合数取模 comb (组合数 Lucas)
  13. 录像机中码流类型中定时、事件、网传代表什么意思?
  14. greenplum 历史拉链表
  15. linux ubuntu bionic,如何升级Ubuntu到18.04 LTS Bionic Beaver
  16. 组合数算法的非递归实现
  17. 怪诞行为学 读书笔记
  18. .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)
  19. 微信小程序开发实战(13):图像组件(image)
  20. LINUX 字体装在哪个文件夹里

热门文章

  1. PROTEUS下载安装
  2. Python也可以抢网速,我下了十部电影,室友才一部
  3. vb6.0 __stdcall函数内调用__cdecl函数_mingw版
  4. 视频教程-C#文件系统的操作-C#
  5. 原生js支持的编码转换方法
  6. 使用python调用minitab_Minitab小技巧: 解决Python错误的快速提示
  7. 80后,招谁惹谁了?
  8. 社区团购小程序怎么开发
  9. 使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件
  10. 网页的视频聊天室开发