概念
作用
创建
创建web项目
定义类实现Servlet接口,实现其抽象方法
配置Filter
原理
注解配置
过滤器放行
Filter的生命周期
Filter的拦截路径
Filter的拦截方式
Filter的过滤器链
概念
- 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
作用
一般用于完成通过的操作。比如登录验证,统一编码处理,敏感字符过滤等等
创建
创建web项目
定义类实现Servlet接口,实现其抽象方法
注意实现的是servlet包下的Filter
package com.lingaolu.filter;import javax.servlet.*;
import java.io.IOException;/*** @author 林高禄* @create 2020-08-04-9:42*/
public class Demo1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("demo1过滤器进来了......");}@Overridepublic void destroy() {}
}
配置Filter
在项目的web.xml文件 中配置,(原理在下面说)
启动访问index.jsp
控制台输出
为什么index.jsp页面看不到内容,因为被我们的拦截器给拦截,说明我们的拦截器成功了
原理
项目启动的时候会把配置文件web.xml解析,把相关东西装进容器
1、我们访问的是这个地址:http://localhost/filterWeb/index.jsp,找到虚拟目录filterWeb,
2、接着拦截的路径进行匹配/*,也就是配置里的<url-pattern>/*</url-pattern>内容,会映射找到<filter-name>demo1</filter-name>的内容demo1,
3、接着根据demo1找到<filter></filter>标签里的内容,根据<filter-name>demo1</filter-name>对应找到<filter-class>com.lingaolu.filter.Demo1</filter-class>,这样就找到了我们的Demo1类,
4、通过反射创建实例,然后会执行doFilte方法,这是规范,所以要实现Filter类并且实现相关的方法。
注解配置
通过上面我们了解了Filter拦截器的创建与在web.xml的配置,但是配置有点繁琐,所以我们介绍一下注解配置
我们创建新的类Demo2.同样实现Filter接口
可以使用注解配置,然后我们的web.xml不需要写任何配置,也就是这个文件你删掉也可以
接着在我们Demo2类名上加上注解@WebFilter("/*"),其中"/*"是你定义的拦截路径
ctrl+鼠标左键查看一下 WebFilter
我们先把xml配置的demo1的拦截器配置给注释掉,免得影响我们的demo2
启动访问index.jsp
看控制台输出
是不是很方便,比在xml配置方便多了,所以以后我们写使用注解配置,也不需要创建web.xml文件了。
这里我们可以快捷的创建过滤器
模板可以自己定义
过滤器放行
上面我们的例子里面index.jsp页面被拦截了,所以没有出现任何内容,对于满足某些条件的连接,我们还是要放行的,比如登录的用户等等,将来可以做登录验证等等,满足条件的就放行,
- 如果全部都拦截,那么这个项目就没意义
- 如果全部都放行,那么拦截就可能没什么意义
- 将来做一些判断,满足某些条件的放行
filterChain.doFilter(servletRequest,servletResponse);
启动访问index.jsp,有内容了,是因为我们放行了
控制台输出
Filter的生命周期
Filter过滤器的生命周期
Filter的拦截路径配置
Filter过滤器的拦截路径配置
Filter的拦截方式
Filter的拦截方式配置
Filter的过滤器链
Filter的过滤器链