1.什么是过滤器
过滤器用于拦截传入的请求和传出的响应
监视、修改或以某种方式处理正在客户端和服务器之间交换的数据流
2.过滤器的工作过程
3.过滤器的常见用途
一般用于完成通用的操作,如:登录验证、同意编码处理、敏感字符过滤、、、、
利用过滤器特殊的执行时机,可以实现 Web 应用程序中的预处理和后期处理逻辑
日志记录
改善性能
安全与会话管理
敏感字过滤
……
(1)过滤器的快速入门
步骤:
a:定义一个类,实现接口Filter
b:复写方法
c:配置拦截路径
1.web.xml
2.注解
(2)过滤器细节
1.web.xml配置
2.过滤器执行流程
执行过滤器
执行放行后的资源
回来执行过滤器放行代码下边的代码
3.过滤器生命周期方法
init:在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次。用于加载资源
doFilter:每一次请被拦截资源时,会执行,执行多次
destory:服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destory方法,只执行一次。
4.过滤器配置详解
(1)拦截路径配置
具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
目录拦截:/user/* 访问/user下的所有资源时,过滤器都会被执行
后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
拦截所有资源:/* 访问所有资源时,过滤器都会被执行
(2)拦截方式配置:资源被访问的方式
注解配置
- 设置dispatcherTypes属性
- REQUEST: 默认值 浏览器直接请求资源
- FORWARD: 转发访问资源
- INCLUDE: 包含访问资源
- ERROR: 错误跳转资源
- ASYNC: 异步访问资源
web.xml配置
设置标签即可
5.过滤器链(配置多个过滤器)
执行顺序:如果有两个过滤器:过滤器1和过滤器2
过滤器1 --> 过滤器2 -->资源执行 --> 过滤器2 --> 过滤器1
过滤器先后顺序问题:
注解配置;按照类名的字符串比较规则比较,值小的先执行
如:AFilter 和 BFilter,AFliter就先执行了
web.xml配置:谁定义在上边,谁先执行
6.案例:
案例1:登录验证
需求:
1.访问day17_case案例的资源,验证其是否登录
2.如果登录了,则直接放行
3.如果没有登录,则跳转到登录页面,提示“你尚未登录,请先登录”;
案例2:敏感词汇过滤
需求:
1.对day17_case案例录入的数据进行敏感词汇过滤
2.敏感词汇参考《敏感词汇.txt》
3.如果是敏感词汇,替换为 *
分析:
1.对request对象进行增强
增强对象的功能
设计模式:一些通用的解决固定问题的方式
1.装饰模式
2.代理模式
概念;
1.真是对象:被代理的对象
2.代理对象:
3.代理模式:代理对象代理真是对象,达到增强真是对象功能的目的
实现方式:
1.静态代理:有一个类文件描述代理模式
2.动态代理:在内存中形成代理类
实现步骤:
1.代理对象和真实对象实现相同的接口
2.代理对象 = Proxy.newProxyInstance();
3.使用代理对象调用方法
4.增强方法
增强方式:
1.增强参数列表
2.增强返回值类型
3.增强方法体执行逻辑
4.Filter接口
javax.servlet.Filter接口定义了过滤器需要实现的方法
方法名称功能描述void init( FilterConfig filterConfig)Web容器调用该方法实现过滤器的初始化void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )当客户端请求资源时,Web容器会调用与资源对应的过滤器的doFilter( )方法。在该方法中,可以对请求和响应进行处理,实现过滤器的功能void destroy( )Web容器销毁过滤器时调用该方法,可用来释放过滤器所用的资源
5.FilterConfig接口
在过滤器初始化过程中获取配置信息
方法名称功能描述String getFilterName()返回部署描述符中定义的过滤器的名称Enumeration getInitParameterNames()返回 元素中定义的 init 参数的名称的字符串枚举String getInitParameter ( String name ) 获取web.xml中设置的以name命名的初始化参数值ServletContext getServletContext()返回过滤器所属的Web上下文对象引用
6.过滤器的应用
利用过滤器的特性,对原本分散的中文乱码处理实现集中统一处理