




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一 一 Filter 的介绍及使用的介绍及使用 什么是过滤器 与 Servlet 相似 过滤器是一些 web 应用程序组件 可以绑定到一 个 web 应用程序中 但是与其他 web 应用程序组件不同的是 过滤器 是 链 在容器的处理过程中的 这就意味着它们会在 servlet 处理器之 前访问一个进入的请求 并且在外发响应信息返回到客户前访问这些 响应信息 这种访问使得过滤器可以检查并修改请求和响应的内容 过滤器适用于那些地方 为一个 web 应用程序的新功能建立模型 可被添加到 web 应用 程序中或者从 web 应用程序中删除而不需要重写基层应用程序 代码 向过去的代码添加新功能 过滤器放在容器结构的什么位置 过滤器放在 web 资源之前 可以在请求抵达它所应用的 web 资源 可以是一个 Servlet 一个 Jsp 页面 甚至是一个 HTML 页面 之前截 获进入的请求 并且在它返回到客户之前截获输出请求 Filter 用来 拦截请求 处于客户端与被请求资源之间 目的是重用代码 Filter 链 在 web xml 中哪个先配置 哪个就先调用 在 filter 中也可以配置一些 初始化参数 Java 中的 Filter 并不是一个标准的 Servlet 它不能处理用户请求 也不能对客户端生成响应 主要用于对 HttpServletRequest 进行预处 理 也可以对 HttpServletResponse 进行后处理 是个典型的处理链 Filter 有如下几个用处 在 HttpServletRequest 到达 Servlet 之前 拦截客户的 HttpServletRequest 根据需要检查 HttpServletRequest 也可以修改 HttpServletRequest 头 和数据 在 HttpServletResponse 到达客户端之前 拦截 HttpServletResponse 根据需要检查 HttpServletResponse 可以修改 HttpServletResponse 头和数据 Filter 有如下几个种类 用户授权的 Filter Filter 负责检查用户请求 根据请求过滤用户非法请求 日志 Filter 详细记录某些特殊的用户请求 负责解码的 Filter 包括对非标准编码的请求解码 能改变 XML 内容的 XSLTFilter 等 一个 Filter 可负责拦截多个请求或响应 一个请求或响应也可被多个请 求拦截 创建一个 Filter 只需两个步骤 1 创建 Filter 处理类 2 在 web xml 文件中配置 Filter 创建 Filter 必须实现 javax servlet Filter 接口 在该接口中定义了三个 方法 void init FilterConfig config 用于完成 Filter 的初始化 void destroy 用于 Filter 销毁前 完成某些资源的回收 void doFilter ServletRequest request ServletResponse response FilterChain chain 实现过滤功能 该方法就是对每个请求 及响应增加的额外处理 过滤器 Filter 也具有生命周期 init doFilter destroy 由部 署文件中的 filter 元素驱动 在 servlet2 4 中 过滤器同样可以用于请 求分派器 但须在 web xml 中声明 INCLUDE 或 FORWARD 或 REQUEST 或 ERROR该元素位于 filter mapping 中 Filter 常用的场景 例一 日志的记录 当有请求到达时 在该过滤器中进行日志的记录 处理完 成后 进入后续的 Filter 或者处理 步骤 1 编写 Filter 类 package test filter import javax servlet Filter import javax servlet FilterChain import javax servlet FilterConfig import javax servlet ServletContext import javax servlet ServletRequest import javax servlet ServletResponse import javax servlet http HttpServletRequest public class LogFilter implements Filter private FilterConfig config 实现初始化方法 public void init FilterConfig config this config config 实现销毁方法 public void destroy this config null public void doFilter ServletRequest request ServletResponse response FilterChain chain 获取 ServletContext 对象 用于记录日志 ServletContext context this config getServletContext long before System currentTimeMillis System out println 开始过滤 将请求转换成 HttpServletRequest 请求 HttpServletRequest hrequest HttpServletRequest request 记录日志 context log Filter 已经截获到用户的请求的地址 hrequest getServletPath try Filter 只是链式处理 请求依然转发到目的地址 chain doFilter request response catch Exception e e printStackTrace long after System currentTimeMillis 记录日志 context log 过滤结束 再次记录日志 context log 请求被定位到 HttpServletRequest request getRequestURI 所花的时间为 after before 在上面的请求 Filter 中 仅在日志中记录请求的 URL 对所有的请 求都执行 chain doFilter request reponse 方法 当 Filter 对请求过滤 后 依然将请求发送到目的地址 步骤 2 在 web xml 中配置 Filter log test filter LogFilter log filter 通过上述步骤的操作 此时就可以通过 URI 进行访问 具体访问 后会在 log 文件中的 localhost 文件中产生具体的访问日志 如下所示 2010 12 28 21 12 50 org apache catalina core ApplicationContext log 信息 请求被定位到 examples jsp jsp2 el basic arithmetic jsp 所花 的时间为 0 2010 12 28 21 14 55 org apache catalina core ApplicationContext log 信息 Filter 已经截获到用户的请求的地址 jsp jsp2 el basic comparisons jsp 2010 12 28 21 14 56 org apache catalina core ApplicationContext log 信息 过滤结束 例二 进行编码的修正 当有新的请求时 需要将用户传送过来的 字符进行重新编码 以使其可以满足服务器的编码格式 1 编写 EncodingFilter 类 package test filter import java io IOException import javax servlet Filter import javax servlet FilterChain import javax servlet FilterConfig import javax servlet ServletContext import javax servlet ServletException import javax servlet ServletRequest import javax servlet ServletResponse public class EncodingFilter implements Filter private FilterConfig filterConfig null private String encoding null 实现销毁方法 public void destroy encoding null 进行具体的过滤 public void doFilter ServletRequest request ServletResponse response FilterChain chain throws IOException ServletException 获取 ServletContext 对象 用于记录日志 ServletContext context this filterConfig getServletContext context log 开始设置编码格式 String encoding getEncoding if encoding null encoding gb2312 在请求里设置上指定的编码 request setCharacterEncoding encoding chain doFilter request response context log 成功设置了编码格式 初始化配置 public void init FilterConfig filterConfig throwsServletException this filterConfig filterConfig this encoding filterConfig getInitParameter encoding private String getEncoding return this encoding 步骤 2 在 web xml 中配置 Filter encoding test filter EncodingFilter encoding gb2312 encoding encode 通过上述步骤的操作 此时就可以通过 URI 进行访问 例三 用户权限的认证 当用户发送请求时 可以对用户的身份信息进 行验证 如果能够通过验证则接下来再进行其它操作 否则直接不进 入下一步的处理 1 编写身份认证 SecurityFilter 类 package test filter import java io IOException import javax servlet Filter import javax servlet FilterChain import javax servlet FilterConfig import javax servlet ServletContext import javax servlet ServletException import javax servlet ServletRequest import javax servlet ServletResponse import javax servlet http HttpServletRequest import javax servlet http HttpServletResponse import javax servlet http HttpSession public class SecurityFilter implements Filter private FilterConfig filterConfig 初始化方法实现 Override public void init FilterConfig filterConfig throwsServletException this filterConfig filterConfig 身份认证的过滤 Override public void doFilter ServletRequest request ServletResponse response FilterChain chain throws IOException ServletException ServletContext context this filterConfig getServletContext HttpServletRequest req HttpServletRequest request HttpServletResponse res HttpServletResponse response HttpSession session req getSession 登录后才能进入下一步处理 否则直接进入错误提示页面 if session getAttribute username null context log 身份认证通过 进入下一步处理 chain doFilter request response else context log 身份认证失败 直接返回 res sendRedirect failure jsp 实现销毁方法 Override public void destroy this filterConfig null 步骤 2 在 web xml 中配置 Filter security test filter SecurityFilter security security 通过上述步骤的操作 此时就可以通过 URI 进行访问 此时如果能够 取得 Session 中的 username 值时 会直接进入下一步处理 否则直 接进入错误页面 二 过滤链二 过滤链 FilterChain 两个过滤器 EncodingFilter 负责设置编码 SecurityFilter 负责控 制权限 服务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学数学趣味教学课件设计思路
- 2025-2030中国燃气行业碳减排路径与清洁能源替代方案报告
- 2025-2030中国燃气管行业政策环境及市场前景展望报告
- 2025-2030中国燃气用户满意度调查与服务标准提升研究
- 2025-2030中国燃气期货市场发展潜力与交易机制设计研究报告
- 服装零售店员工岗位职责与服务规范
- 2025-2030中国燃气具行业渠道变革与新零售模式创新报告
- gyb考试试卷及答案
- 物业管理费用预算编制与审计方案
- 古诗文教学设计与多文本阅读指导
- 道德与法治课件《我们神圣的国土》课件(34张)
- 计算与人工智能概论(湖南大学)知到智慧树章节答案
- GB/T 44625-2024动态响应同步调相机技术要求
- 2024年辽宁省大连市政公用事业服务中心招聘雇员8人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 25《王戎不取道旁李》 教学设计
- 2024年咨询工程师继续教育城市轨道交通工程可行性研究报告编制方法考试答案
- 【项目方案】源网荷储一体化项目(储能+光伏+风电)规划报告
- 咖啡因实验报告认知功能与记忆力评估
- (正式版)SHT 3075-2024 石油化工钢制压力容器材料选用规范
- 各类质谱仪的优缺点分析 质谱仪解决方案
- 苏科版九年级数学下册《二次函数与一元二次方程》评课稿
评论
0/150
提交评论