Filter过滤器
当访问服务器资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
- 过滤器的作用:
- 一般用于完成通用操作, 如登录验证 / 同一编码 / 敏感字符的过滤
- 编写步骤:
- 定义一个类,实现接口
Filter
- 复写方法
- 配置拦截路径
- 注解配置:
@WebFilter
web.xml
配置
- 注解配置:
- 定义一个类,实现接口
<filter>
<filter-name>firstFilter</filter-name>
<filter-class>cn.study.l18.web.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>firstFilter</filter-name>
<!-- 拦截路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 过滤器细节:
web.xml
配置- 过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下的代码
- 过滤器生命周期方法
init()
-> 在服务器启动后创建Filter对象调用init方法doFilter()
-> 每一次请求拦截资源时被执行destroy()
-> 在服务器关闭后,Filter被销毁,正在关闭时执行destroy()方法
- 过滤器配置
- 拦截路径: urlPatterns
- 具体资源路径:
/index.jsp
- 目录拦截:
/user/*
- 后缀名拦截:
*.jsp
- 拦截所有资源:
/*
- 具体资源路径:
- 拦截方式(资源被访问的方式):
- 注解配置:
dispatcherTypes
REQUEST
: 默认值 - 浏览器直接请求FORWARD
: 服务器转发访问INCLUDE
: 包含访问资源ERROR
: 错误跳转资源ASYNC
: 异步访问资源
- web.xml配置:标签即可
- 注解配置:
- 拦截路径: urlPatterns
- 过滤器链(配置多个过滤器)
- 执行顺序: 如果有两个过滤器: 1, 2
- 过滤器1 -> 过滤器2 -> 资源执行 -> 过滤器2 -> 过滤器1
- 过滤器先后顺序配置:
- 注解配置: 按照类名的字符串比较规则比较, 值小的先执行
web.xml
配置: 谁先定义,谁先执行
- 执行顺序: 如果有两个过滤器: 1, 2
- 案例:
- 案例1:登录验证:
- 访问案例资源,验证其是否登录
- 如果登录了,直接放行
- 如果没有登录,则跳转到登录页面,提示:您尚未登录,请先登录
- 案例2: 敏感词汇过滤
- 对案例录入的数据进行敏感词汇过滤
- 如果是敏感词汇,替换为***
- 分析:
- 对
request
对象进行增强,增强获取参数相关方法 - 放行,传递代理对象
- 对
- 案例1:登录验证:
- 代理设计模式(动态代理):
- 真实对象: 被代理的对象
- 代理对象: 代理真实的对象
- 代理模式: 代理对象代理真实对象,达到真实对象功能的目的
- 实现方式:
- 静态代理: 有一个类文件描述代理模式
- 动态代理: 在内存中形成代理
- 实现步骤:
- 代理对象和真实对象实现相同的接口
代理对象 = Proxy.newProxyInstance()
- 使用代理对象来调用方法
- 增强方法
- 增强方式:
- 增强参数列表
- 增强返回值类型
- 增强方法体执行逻辑