JavaWeb中filter的详解及应用案例

转载自:http://www.cnblogs.com/vanl/p/5742501.html

一:Filter介绍

  Filter可认为是Servlet的一种“变种”,它主要用于对用户请求(HttpServletRequest)进行预处理,也可以对服务器响应(HttpServletResponse)进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

二:Filter的几个用处

  在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。

  根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

  在HttpServletResponse到达客户端之前,拦截HttpServletResponse。

  根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

三:Filter的种类

  用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。

  日志Filter:详细记录某些特殊的用户请求。

  负责解码的Filter:包括对非标准编码的请求解码。

  Filter可拦截多个请求或响应;一个请求或响应也可被多个请求拦截。

四:Filter的应用实例

  创建一个Filter只需要两个步骤:1.创建Filter处理类(如:MyFiletr)实现javax.servlet.Filter接口;2.web.xml中配置Filter

  4.1.简单的记录日志的Filter,这个Filter负责拦截所符合条件的用户请求,并将请求的信息记录在日志中。

  

  

  web.xml配置信息:

  

  总结:上面的程序实现了doFilter()方法,实现该方法就可以实现对用户请求进行预处理,也可以实现对服务器响应进行后处理--他们的分界线为是否调用了chain.doFilter(),执行该方法之前,即对用户请求进行预处理;执行该方法之后,即对服务器响应进行后处理。

  在上面的请求Filter中,仅在日志中记录请求的URL,对所有的请求都执行chain.doFilter (request,reponse)方法,当Filter对请求过滤后,依然将请求发送到目的地址。如果需要检查权限,可以在Filter中根据用户请求的HttpSession,判断用户权限是否足够。如果权限不够,直接调用重定向即可,无须调用chain.doFilter(request,reponse)方法。

  4.2.简单的认证登录Filter。

  

  

  web.xml配置信息:

  

  4.3.再次阐述Filter及一个应用小例子。

  Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

  Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获处理。

  

  web.xml配置信息:

  

五:应用总结  

  Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。

  Filter的生命周期和Servlet一样,Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是1>在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。3>当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。4>当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。注意:init方法与destroy方法只会直接一次。
  Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。


http://www.taodudu.cc/news/show-1385841.html

相关文章:

  • Servlet过滤器示例及分析----日志过滤器 以及对flush()理解
  • 基于MVC的jpetstore项目分析
  • jpetstore开发实战--(1)
  • JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
  • 1.开源平台
  • HTML中id和name的区别(js中的注意事项)
  • HTML中name与id的区别
  • HTML引用外部css 、js的路径
  • 通过CDN引入jQuery的几种方式
  • JS在HTML中放的位置
  • Js和jQuery的文档就绪函数以及执行次数
  • .html()与.text()区别与辨析
  • 理解jQuery的 $ 和 $( )的含义
  • javaFx--TableView、combobox的注意事项
  • fastjson--JSON.toJSONString(OBJ) 报错
  • html/css/js各类相对路径引用方法归类
  • 使用jQuery时报错:$未被定义
  • 解决:浏览器无法及时更新css样式等改动
  • Web服务器与Servlet容器初步认识
  • javafx-TableView 行颜色设置
  • 将常规项目转换为Maven项目
  • Maven generate/构建项目太慢解决方法
  • SQL:having和where的区别
  • DBMS连接不上 —— 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
  • SQL—— Create table as select 与 使用select查询结果创建新表
  • Python中and、or、not用法
  • ubuntu18.04虚拟机突然连不上网
  • 用户界面和兼容性测试
  • C语言:字符数组赋值
  • C语言:进制转换(整数、字符串)

JavaWeb中filter的详解及应用案例相关推荐

  1. Pylon SDK 中相机配置详解及应用案例(附代码)

    目录 前言 1.相机参数配置 1.1检验可访问性 1.2枚举特征 1.3整数特征 2.应用一:打印相机参数 3.应用二:优化Basler GigE相机性能 前言 关于Pylon SDK的主要流程在上篇 ...

  2. javaweb项目Filter过滤器详解

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  3. JavaWeb中的Cookie详解

    Cookie会话技术 什么是会话 在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话.Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器 ...

  4. Photoshop CS 中的“照片滤镜/Photo Filter”命令详解(转)

    Photoshop CS 中的"照片滤镜/Photo Filter"命令详解(转)[@more@] 这是一个跟摄影有关的重要图像调整命令. 有关这一命令的教程,现在网上没一个能说得 ...

  5. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  6. FLV文件中VideoPacket的详解

    FLV文件中VideoPacket的详解 众所周知,FLV文件体主要有三种Tag组成:AUDIODATA.VIDEODATA和SCRIPTDATA,其中SCRIPTDATA中包含了MetaData,通 ...

  7. oracle中的用户详解 【转】

    oracle中的用户详解 [转] - feiyun8616 - 博客园 (cnblogs.com)https://www.cnblogs.com/feiyun8616/p/6497690.htmlor ...

  8. BLAST+中blastn参数详解

    [转]BLAST+中blastn参数详解 2012-05-22 13:25 转载自  lidaof 最终编辑  lidaof 与之前的blast相比,新的blast+将blastn,blastx等合作 ...

  9. 双边滤波(Bilateral Filter)详解

    双边滤波(Bilateral Filter)详解 转自:睁开眼就变帅 原理分析: 双边滤波与高斯滤波器相比,对于图像的边缘信息能过更好的保存.其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高 ...

最新文章

  1. 常见的容错机制+failover+failback
  2. iTunes只能装C盘吗_C盘清理简单汇总
  3. go本地调用image-syncer
  4. JDK5--Annotation学习:基础(一)
  5. 38Exchange 2010升级到Exchange 2013-安装第二台CAS2013
  6. Tomcat - Springboot启动的时候初始化的线程池默认配置
  7. git pull出现错误的解决办法
  8. 论文笔记之:Deep Reinforcement Learning with Double Q-learning
  9. 第一个ExtJS练习(添加用户面板)
  10. myeclipse编程技巧--中编辑器输入任何字母都出现提示功能
  11. php mysql 数据库类_PHP操作MySQL数据库的类
  12. nodejs升级命令_又一阵后浪:横空出世的Deno会取代NodeJS吗?
  13. 2022年由电子科技到整体科技
  14. 个性化制作nodemcu-firmware(esp8266/esp8285 固件制作)----包含lua程序bin的制作
  15. 组装台式计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  16. 关于“PS中用魔棒选取之后拖到另一个图层中怎么没颜色了”的解决方法
  17. 百度css3背景图代码,CSS3 实现花式背景图案
  18. Windows服务器运行spring boot的jar包会自动关闭
  19. Python+OpenCV图像处理(一篇全)
  20. 1014: 编程计算长方形的周长和面积~

热门文章

  1. java 弹性碰撞_球体弹性碰撞位置和速度计算算法
  2. php判断是不是iphone访问,php基于http协议访问,判断访问来源iphone,android,微信浏览器,pc电脑...
  3. 深度linux添加xp,Linux和Windos XP下向路由表添加路由
  4. 虚拟机nfs服务器的安装,linux 安装nfs服务器
  5. 11g R2 RAC客户端负载均衡配置
  6. ELK 源码详细安装步骤
  7. Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf 、 Mongodb 实践(六)
  8. 浅谈 Spring IOC
  9. Java知识点详解 4 泛型
  10. java 字符串编程题_Java编程题——在一个字符串中查找第一个非重复的字符