# JavaWebFilter **Repository Path**: fowner/java-web-filter ## Basic Information - **Project Name**: JavaWebFilter - **Description**: JavaWeb三大组件之FIlter学习笔记 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-07 - **Last Updated**: 2022-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Filter技术 ## Filter概述 + Filter是JavaWeb三大组件之一。 + Filter是JavaEE的规范。 + Filter作用是拦截请求,过滤响应。 拦截请求常用的应用场景 + 权限检查 + 日志记录 + 事务管理 等 ## Filter开始之前的体验 ``` 要求: 在web工程目录下有一个admin文件夹,这个文件夹的资源必须在登陆之后才能允许访问。 思考: 1.如何检查用户是否登陆? 由于当用于登陆后,信息会被保留到session中。所以查看sessino中是否有用户登陆信息即可。 实现: 在jsp文件中加入西面代码。 <% Object user = session.getAttribute("user"); //判断用户是否为空 if(user == null){ request.getRequestDispatcher("/login.jsp").forward(request,response); return ; } %> 问题: 由于上面代码是java代码,html中不能写,所以这种方法智能针对jsp文件进行设定。 那么html文件怎么办呢?那么Filter就登场了。 ``` ## Filter过滤器的使用 + 创建Filter的实现类去实现Filter接口 + 重写doFilter的方法 + 到web.xml中配置拦截器的拦截路径 使用Filter实现登录页面的功能。 ## Filter的生命周期 + 构造器方法 web服务启动时执行。 + init方法 web服务启动时执行 + doFilter方法 每次拦截到请求就会被执行 + destory方法 web服务停止的时候就会执行。 ## FilterConfig类 ### FilterConfig类概述 ``` FilterConfig就是Filter过滤器的的配置类. Tomcat启动,创建Filter的的时候就会创建一个FilterConfig类对象,这里包含了Filter的配置信息。 ``` ### FilterConfig类的作用 + 获取过滤器的名称即Filter-name标签的值。 + 获取过滤器的初始参数即init-param标签的值。 + 获取ServletContext对象。 ## FilterChain过滤链 ### 概述 ``` FilterChain过滤链就是多个过滤器的时候如何执行。如果不是最后一个过滤器,则按照web.xml中filter-mapping的定义的先后顺序往下执行。 如果是最后一个过滤器了,则执行目标资源。 ``` ### 作用 + 往下继续执行过滤器 + 执行目标资源 ### 当FilterChain过滤器有多个Filter时的特点 + 多个Filter的执行顺序的先后是由在web.xml中定义的先后(从上到下)顺序决定的。 注意:由于Filter是根据URL进行过滤的,最先走到的是filter-mapping标签,所以上面所说的定义的先后顺序是指filter-mapping标签的位置顺序。 + 多个Filter执行的时候默认是同一个线程目标资源也是同一个线程 + 执行的时候是同一个request对象。(因为同一次请求) ## Filter拦截器路径 ### 精确匹配 + 例 /target.jsp 表示URL地址必须是:http://服务地址:端口/工程目录/target.jsp ### 目录匹配 + 例 /admin/* 表示URL地址必须是以:http://服务地址:端口/工程目录/admin/ 开头 ### 后缀名匹配 + 例1 *.jsp 表示URL地址必须以.jsp结尾 + 例2 *.do 表示URL地址必须以.do结尾 注:不能是含有/否则错误