Java过滤器的使用和拦截排除的实现

Java过滤器的使用和拦截排除的实现

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

Java 过滤器的使用和拦截排除的实现

2016/08/11 0 Java 过滤器的使用和拦截排除的实现本文将对如下几个内容作出

讲解与说明:

web.xml 的简单介绍

filter 的工作原理

filter 的实现

拦截排除的实现和说明

web.xml 简单介绍在Java 开发中,我们每天都有跟拦截器打交道,但是很多人对

filter 到底是个什么东西可能并没有做深入的了解,包括对web.xml 中的servlet、

servlet-Mapping、filter、filter-mapping 都很陌生,那么现在我们可以简单的交流一

下。

servlet servlet servlet-name A /servlet-name servlet-class

com.test.TestServlet

/servlet-class /servlet servlet-mapping servlet-name A /servlet-name url-pattern /a.do /url-pattern /servlet-mapping servlet 上表达的意思就是声明一个名字A 的servlet,对应的实现类com.test.TestServlet。servlet-mapping 表达的意思是,当一个

请求后缀为a.do 的http 请求发送过来以后,该请求会调用名字为A 的servlet,换句

话说就是执行TestServlet 来处理该请求。

filter 有了上面servlet 的理解,我们理解filter 就更加方便。请看如下简单配

置。filter filter-name SessionFilter /filter-name filter-class com.demo.test.util.SessionFilter /filter-class init-param param-name excludedPages

/param-name param-value /index.jsp /param-value !-- 匹配不做拦截的请求声明-- /init-param /filter filter-mapping !-- 拦截的请求类型-- filter-name SessionFilter

/filter-name url-pattern /index.jsp /url-pattern /filter-mapping 上面的filter 表达的意

思是声明一个名字叫做SessionFilter 的过滤器,该过滤器的具体实现对应

com.demo.test.util.SessionFilter。该过滤器给定初始化参数(名称:excludedPages,

参数:excludedPages),类似httpServletRequest 对象中的声明的请求参数。filter-

盘式过滤器的原理及应用

盘式过滤器的原理及应用 一、盘片式过滤器工作原理 盘式过滤器由过滤单元并列组合而成,其过滤单元主要是由一组带沟槽或棱的环状增强塑料滤盘构成。过滤时污水从外侧进入,相邻滤盘上的沟槽棱边形成的轮缘把水中固体物截留下来;反冲洗时水自环状滤盘内部流向外侧,将截留在滤盘上的污物冲洗下来,经排污口排出。盘片在单元内为紧密压实叠加在一起,上下两层盘片中间沟槽起到过滤拦截的作用。原水通过过滤单元时由外向内流动,大于沟槽的杂质会被拦截在外部。下面是盘式过滤器盘片图1: a b 图1盘式过滤器盘片 通过旋转盘片,可以改变盘片之间的空隙,使盘式过滤器设备达到过滤不同粒径污染物的作用,图1中a是盘片最大通过通道,b是盘片最小通过通道。 盘式过滤器的核心部件是叠放在一起的塑料滤盘,滤盘上有特制的沟槽或棱,相邻滤盘上的沟槽或棱构成一定尺寸的通道,每个过滤

头内装有上百个这样的滤盘,盘片形状类似光盘,一般厚约1mm,两面刻有螺旋状沟槽,螺旋线由内向外辐射。一块盘两面的螺旋方向相反。压紧的两片间沟槽形成密布的交叉网,并且越向圆心越细密。在工作状态时,盘片在弹簧力和水力的作用下,紧紧压在一起,水由外圆向圆心流过,悬浮物即被截留在“网”中。粒径大于通道尺寸的悬浮物均被拦截下来,达到过滤效果。以下是盘式过滤器过滤原理图2: 压缩过滤盘片 图2盘式过滤器过滤原理 过滤过程: 1、待处理的污水自进水口进入过滤单元; 2、水流自滤盘组外侧流向滤盘组内侧; 3、水流在经过环状棱构成的通道时,粒径大于棱高度的颗粒被拦截下来,储存在曲线棱构成的空间、滤盘组与外壳的间隙内; 4、滤后清水进入环状滤盘内部,经出口引出。 当过滤阻力增大时,或达到设定的运行时间,开始反冲洗。此时水由圆心向外圆流动,水压克服弹簧紧力,盘片松动,将泥砂冲走。但如何确保在很短时间内,所有盘片都能分开,得到冲洗,是这一技

java过滤器

在基于 JSP 页面系统设计开发中,经常有一批页面需要对用户的身份进行验证,只有合法的用户才可以访问这些页面。显然可以在每个页面中添加身份验证,但这样做会给编程造成很大的麻烦,而且增加多余的代码。那么,如何解决JSP 页面用户身份验证呢? 二、JSP 页面中用户身份验证分析 在有多个用户使用的 JSP 系统中,为了保障系统的隐秘性安全性,就需要对登录系统的用户进行身份验证以保证用户身份的合法性。一个用户首次登录系统后会在session 对象中留下它的标识[1],就可以利用这个标识来完成各个JSP页面的用户身份验证。为了避免每个页面都进行身份验证而出现的麻烦,这里将通过Servlet 过滤器对JSP 页面统一进行身份验证。 三、用户身份验证的设计思路和技术要点 1、设计思路 Servlet 过滤器验证用户是围绕session 对象进行的。首先是实现用户登录的功能,在用户登录成功后产生一个session 标识;然后创建Servlet 过滤器,判断标识值是否正确,如果正确则通过验证,否则将给出提示信息并跳转到用户登录页面。 2、技术要点 使用 Servlet 过滤器实现JSP 页面中用户身份验证,首先必须实现Filter 接口,且重写doFilter() 方法,由doFilter() 方法去处理过滤业务;其次,在web.xml 文件中配置Servlet 过滤器,指定过滤器的名称、过滤器包所在类的名称及过滤器的映射范围等[2]。 四、JSP 页面中用户身份验证的实现 1、用户身份合法性确认 为了能够使用 Servlet 过滤器实现用户对JSP 页面访问的合法性验证,首先需要根据用户登录号和密码等与数据库中的信息相比较,若能匹配成功,则是用户登录成功,就用session 对象存储该用户的标识;然后再由Servlet 过滤器实现对用户访问的各个页面的过滤。存储用户登录成功的session 标识的核心代码为:session.setAttribute("user", 用户登录号 )。 2、Servlet 过滤器的实现 用 Servlet 过滤器实现用户身份验证的关键代码如下: package hzu.util.filters; public class UserFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException{ this.filterConfig=filterConfig;

过滤器和拦截器的区别

过滤器和拦截器的区别 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器:就是在你调用一个方法前,或者调用一个方法后,做一些业务逻辑的操作,例如打印字符串。 下面通过实例来看一下过滤器和拦截器的区别: 使用拦截器进行/admin 目录下jsp页面的过滤:

下面是我实现的拦截器: package com.test.news.util; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.test.news.action.AdminLoginAction; public class AccessInterceptor extends AbstractInterceptor { private static final long serialVersionUID = -4291195782860785705L; public String intercept(ActionInvocation actionInvocation) throws Exception { ActionContext actionContext = actionInvocation.getInvocationContext(); Map session = actionContext.getSession(); Object action = actionInvocation.getAction(); if (action instanceof AdminLoginAction) { return actionInvocation.invoke(); } //check session

Java filter过滤器在项目开发中的应用

过滤器在项目开发中的应用 javaee过滤器在项目怒开发中通常有三种应用: 应用一:统一项目的字符编码: 我们新建一个名为Encode.java的文件,内容是: package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class Encode implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } 程序在dofilter的方法中设置了request和response的编码为utf-8,这样便可以解决开发中的乱码问题,配置文件web.xml这样写:

拦截器和过滤器的区别以及AOP概念

过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置 一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不 是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符 拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在 方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异 常的时候做业务逻辑的操作。 拦截器与过滤器的区别: 1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被 调用一次 执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤 通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数 据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。 面向切面编程(AOP是Aspect Oriented Program的首字母缩写),我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中 往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一 个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。 但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须 在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设 计让类与类之间无法联系,而不能将这些重复的代码统一起来。 也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后 再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入 代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是 面向切面的编程。 一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到 需要时再切入对象中去,从而改变其原有的行为。 这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP 则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,

初效中效高效过滤器介绍

初效中效高效过滤器介绍 一、初效过滤器介绍: 初效过滤器适用于空调系统的初级过滤,主要用于过滤5μm 以上尘埃粒子。初效过滤器有板式、折叠 式、袋式三种样式,外框材料有纸框、铝框、镀锌铁框,过滤材料有无纺布、尼龙网、活性碳滤材、金属孔网等, 防护网有双面喷塑铁丝网和双面镀锌铁丝网。, 初效过滤器特点:价廉、重量轻、通用性好、结构紧凑。主要用于:中央空调和集中通风系统预过滤、大型 空压机预过滤、洁净回风系统、局部高效过滤装置的预过滤、耐高温空气过滤器,用不锈钢外框,耐高温250-300℃过滤效率。 这种效率的过滤器,常用一空调与通风系统的初级过滤,也适用于只需一级过滤的简单空调和通风系统。 G 系列粗效空气过滤器分八个品种,分别为:G1,G2,G3,G4,GN(尼龙网过滤器),GH(金属网过滤器),GC (活性炭过滤器),GT(耐高温粗效过滤器)。 初效过滤器结构 过滤器的外框是以坚固的防水板组成,用来固定已折叠完成的滤材。外框上对角线的设计能提供大过滤 面积,并使内部滤材紧密的粘附在外框上。过滤器的四周皆以特殊的专业粘合胶水与外框粘合,能防止空气泄漏 或因风阻压力造成破损的情况发生。 一次性纸框过滤器的外框一般分为一般硬纸框和高强度摸切硬纸板,滤芯为打褶的纤维过滤材料内衬单 面金属丝网。外型美观。结构坚固耐用。一般硬纸板外框用于制造非标规格的过滤器,可用于任意规格过滤器生 产,高强度,不宜变形。高强度摸且硬纸板用于制造标准规格的过滤器,特点为规格精度高,美观成本低。如果 用进口面纤维或合成纤维过滤材料,则其各项性能指标均可达到或超过进口过滤同产。 过滤材料是以折叠形式装入高强度摸且硬纸板内,迎风面积增大。流入的空气中的尘埃粒子被过滤材料有效 阻挡褶与褶之间。洁净空气从另一面均匀流出,因此气流通过滤器是平缓和均匀的。视过滤材料不同,它所阻挡 的粒径从0。5μm 到5μm 而不同,过滤效率也不同! 二、中效过滤器概述 中效过滤器在空气过滤器中属F 系列过滤器。F 系列中效空气过滤器分袋式和非袋式两种,其中袋式包括F5,F6,F7,F8,F9,非袋式包括FB(板式中效过滤器),FS(隔板式中效过滤器),FV(组合式中效过滤器)。注:(F5、F6、F7、F8、F9)为过滤效率(比色法),F5:40~50%,F6:60~70%,F7:75~85%,F9:85~95%。! 中效过 滤器在工业上应用: 主要用于中央空调通风系统中级过滤、制药、医院、电子、食品、等工业净化中;还可做为高效过滤的 前端过滤,以减少高效过的负荷,延长其使用寿命;由于迎风面大,因此空尘量大、风速低,被认为是目前最好 的中效过滤器结构。 中效过滤器特点: 1.捕集1-5um 的颗粒灰尘及各种悬浮物。 2.风量大。 3.阻力小。 4.容尘量高。 5.可重复清洁使用。 6.型式:无框式和有框袋式。 7.滤料:特殊无纺布或玻璃纤维。 8.效率:60%~95%@1~5um(比色法)。 9.使用最高温度、湿度:80℃、80%。 三、高效过滤器 主要用于捕集0.5um以下的颗粒灰尘及各种悬浮物。采用超细玻璃纤维纸作滤料,胶版纸、铝膜等材料 作分割板,与木框铝合金胶合而成。每台均经纳焰法测试,具有过滤效率高、阻力低、容尘量大等特点。高效空 气过滤器可广泛用于光学电子、LCD液晶制造,生物医药、精密仪器、饮料食品,PCB印刷等行业无尘净化车间的 空调末端送风处。高效和超高效过滤器均用于洁净室末端,以其结构形式可分为有:有隔板高效、无隔板高效、 大风量高效,超高效过滤器等。 另外还有三种高效过滤器,一种是超高效过滤器,能做得到净化99.9995%。一种是抗菌型无隔板高效空 气过滤器,具有抗菌作用,阻止细菌进入洁净车间,一种是亚高效过滤器,价格便宜以前多用于要求不高的净化 空间。 过滤器选型的一般原则 1、进出口通径:原则上过滤器的进出口通径不应小于相配套的泵的进口通径,一般与进口管路口径一致。

权限管理设计说明

对EMS权限管理模块设计 1.权限设计概述 1.1引言 随着Web 服务的复杂度增加以及用户数量和种类的增多,安全问题在理论及工程上都 是一个必须考虑的问题,而权限管理是安全问题中一个很重要的方面。因此本文针对权限做 了一个分析。 权限可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的 逻辑表达式是否为真。 1.2意义 ?用户管理及权限管理一直是应用系统中不可缺少的一个部分 ?系统用户很多,系统功能也很多 ?不同用户对系统功能的需求不同 ?出于安全等考虑,关键的、重要的系统功能需限制部分用户的使用 ?出于方便性考虑,系统功能需要根据不同的用户而定制 1.3目标 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要, 除了功能的必须,更主要的就是因为它足够直观。 简单,包括概念数量上的简单和意义上的简单还有功能上的简单。想用一个权限系统解 决所有的权限问题是不现实的。设计中将变化的“定制”特点比较强的部分判断为业务逻辑, 而将相同的“通用”特点比较强的部分判断为权限逻辑就是基于这样的思路。 扩展,采用可继承的方式解决了权限在扩展上的困难。引进Group概念在支持权限以组 方式定义的同时有效避免了权限的重复定义。 2.基于角色的权限管理设计(Role-Based Access Control,RBAC)2.1权限管理用例图

2.2用例图描述 超级管理员:系统中默认的角色,它是系统中拥有最高权限的角色,它不仅能够管理其他的管理员和用户,而且还可以对系统中每个模块的任一功能进行操作、维护。 普通管理员:它是由超级管理员创建的,并授予权限,它能够管理系统部分的功能,它可以查看所有普通管理员、普通用户的信息,它只能对由它自己创建的用户进行编辑、删除操作,和管理拥有权限的模块。 普通用户:它是系统中最低权限的角色,它只能对自己拥有的权限进行操作,一般情况下,它的权限是对信息的浏览和对自己信息的录入,修改。 登陆系统:根据用户拥有的权限不同,用户所能操作的功能多少就不同,所以在登陆系统的时候就要对用户的权限进行判断。

structs2知识点

Struts2原理 上图来源于Struts2官方站点,是Struts 2 的整体结构。 Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。 (1)核心控制器:FilterDispatcher

FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts2框架处理。 Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。 Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。 Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。 (2)一个请求在Struts2框架中的处理大概分为以下几个步骤 1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。 2 .这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 .如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 .ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 .ActionProxy创建一个ActionInvocation的实例。 7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 .一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

Y型过滤器原理及其性能用途

Y型过滤器 Y型过滤器简介 Y型过滤器是输送介质的管道系统不可缺少的一种过滤装置,Y型过滤器通常安装在减压阀、泄压阀、定水位阀或其它设备的进口端,用来清除介质中的杂质,以保护阀门及设备的正常使用。Y型过滤器具有结构先进,阻力小,排污方便等特点。Y型过滤器适用介质可为水、油、气。一般通水网为18~30目,通气网为10~100目,通油网为100~480目。篮式过滤器主要由接管、主管、滤蓝、法兰、法兰盖及紧固件等组成。当液体通过主管进入滤蓝后,固体杂质颗粒被阻挡在滤蓝内,而洁净的流体通过滤蓝、由过滤器出口排出。 Y型过滤器原理 Y型过滤器(水过滤器)属于管道粗过滤器系列,也可用于气体或其他介质大颗粒物过滤,安装在管道上能除去流体中的较大固体杂质,使机器设备(包括压缩机、泵等)、仪表能正常工作和运转,达到稳定工艺过程,保障安全生产的作用。该公司所生产的Y型过滤器(水过滤器)能根据客户具体要求(特殊压力、特殊口径)定制。Y型过滤器(水过滤器)具有制作简单、安装清洗方便、纳污量大等优点。 Y型过滤器应用 Y型过滤器作为净化设备工程中不可缺少的一款高效过滤设备,在生活废水污水以及工业污水的处理中都发挥了很大的功效,凭借设计和运用方面的各项优势,如今已是备受青睐。 Y型过滤器在各个行业的运用中有效处理了大量生活及工业污水,使宝贵的水资源得到了有效的重复利用,节省大量的水资源功不可没。Y型过滤器运行中的优势包括全程全自动化、免维护、过滤面积大、滤网效率高、使用寿命长、不锈钢材质、过滤精度可选、规格齐全。与其他过滤设备相比它是中水回用工程中最有效的设备之一。而且经过Y型过滤器处理之后的水质不仅达到国家规定的排放标准,而且水还实现了重复、循环利用的目的。 Y型过滤器不能垂直安装,这是其过滤原理决定的。 Y型过滤器的过滤原理:水在经过滤网时,水中杂质遇滤网阻挡在自身重力作用下沉入过滤器下部集污槽内。 如垂直安装,水中杂质将无法聚集在集污槽内,起不到过滤作用,甚至会阻塞滤网导致脏堵。 1、原理 Y型过滤器是输送流体介质的管道系统中不可缺少的一种过滤装置。 Y型过滤器通常安装在减压阀、泄压阀、截止阀(比如室内暖气管路的进水端)或其它设备的进口端,用来清除介质中的杂质,以保护阀门及设备的正常使用。

Servlet过滤器使用

Servlet过滤器使用(javax.servlet.Filter)作者:本站原创发布时间:2010-06-10来源:JA V A中文网点我投稿 教程由JA V A中文网整理校对发布(https://www.360docs.net/doc/7717466280.html,) 过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。 在请求到达Servlet/JSP之前,过滤器截获请求。 在响应送给客户端之前,过滤器截获响应。 多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射的顺序决定。 最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。 过滤器的链式结构 可以为一个Web应用组件部署多个过滤器,这些过滤器组成一个过滤器链,每个过滤器只执行某个特定的操作或者检查。这样请求在到达被访问的目标之前,需要经过这个过滤器链。 实现过滤器 在Web应用中使用过滤器需要实现javax.servlet.Filter接口,实现Filter接口中所定义的方法,并在web.xml中部署过滤器。 public class MyFilter implements Filter { public void init(FilterConfig fc) { //过滤器初始化代码 } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { //在这里可以对客户端请求进行检查 //沿过滤器链将请求传递到下一个过滤器。 chain.doFilter(request, response); //在这里可以对响应进行处理 } public void destroy( ) { //过滤器被销毁时执行的代码 } } Filter接口

struts2中的token拦截器

提交表单时,可能出现这样的情况,如果上次提交成功,按浏览器的返回按钮,再提交一次会出现同一份数据提交两次的情况。如果这份表单不幸两次写入数据库,可能会产生问题。 Struts2提供两个拦截器来组织这种用户无意的行为可能导致的重复提交问题。 实现过程 1.在提交的表单中,添加标记 2.配置TokenInterceptor或TokenSessionInterceptor 3.配置invoke.token结果,决定如果遇到重复提交时需要返回的页面。 另外可以再struts.properties文件中提供struts.messages.invalid.token键值决定如果发生Token的错误信息。 TokenInterceptor实现原理 标记的作用是在显示表单页面时,服务器(由TokenHelper类实现)会生产一个唯一的令牌键值对,并在提交表单时发送给服务器。 服务器会检测客户端提交的令牌和缓存的令牌进行比较,如果是有效的则清除服务器端缓存并继续处理,如果是无效的,则返回invalid.token结果(通常显示一个提示页面)。 TokenSessionStoreInterceptor实现原理 TokenSessionStoreInterceptor扩展自TokenInterceptor,改写了处理无效令牌的机制,不是返回一个invalid.token结果,而是返回上一次成功提交后的结果页面,这是如何做到的呢? TokenSessionStoreInterceptor会针对每次拦截成功执行的ActionInvocation根据令牌的键值为标识符进行缓存,如果发送重复提交,则取出缓存的ActionInvocation中的Result对象返回。 ExecuteAndWaitInterceptor 此拦截器主要目的是给一些长任务请求更好的用户体验,在长任务执行过程中显示给用户一个等待页面,可以通过配置wait结果页面提供一个自定义的等待页面,否则框架将提供一个缺省的比较丑陋的等待页面。 注意: 此拦截器必须放在拦截器堆栈的最后。 此拦截器会基于会话的,这意味着同一个会话中同时只能执行一个此请求 实现原理 1.拦截器会将当前请求包装在一个后台线程中执行(由BackgroundProcess类实现)。 2.在后台线程执行的过程中,拦截器会每隔100微妙检查一下,后台线程是否结束执 行结束。 3.如果在制定的延迟后,后台线程依然没有结束,将返回一个等待页面。 4.如果在指定的延迟后,后台线程运行结束,将返回请求的结果页面。

java笔试题127

选择器 第1题. 编写一个Filter,需要() A. 继承Filter 类 B. 实现Filter 接口 C. 继承HttpFilter 类 D. 实现HttpFilter接口 正确答案为:B 第2题. 自定义标签的配置文件放在________ A. WebRoot B. lib C. classes D. WEB-INF 正确答案为:D 第3题. 在J2EE中,重定向到另一个页面,以下()语句是正确的 A. request . sendRedirect(“http :// www . svse . com . cn”); B. request . sendRedirect(); C. response . sendRedirect(“http: // www . svse . com . cn”); D. response .sendRedirect(); 正确答案为:C 第4题. 自定义标签的作用是 A. 编写和使用方便 B. 规定是这样的,如果不用,别人会说我们不专业 C. 可以减少jsp中的java代码,将代码与界面标签分离,简化前台开发 D. 连数据库 正确答案为:C 第5题. request.getRequestDispatcher().forward(request,response)称之为 A. 流转 B. 转发 C. 重定向 D. 导航 正确答案为:B

第6题. 在J2EE中,给定某Servlet的代码如下,编译运行该文件,以下陈述正确的是()。(选择一项) Public class Servlet1 extends HttpServlet{ Publicvoid init() throws ServletException{ } Publicvoid service(HttpServletRequest request,HttpServletResponse response) ThrowsServletException,IOException{ PrintWriterout = response.getWriter(); out.println(“hello!”); } } A. 编译该文件时会提示缺少doGet()或者dopost()方法,编译不能够成功通过 B. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到输出文字:hello! C. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中看不到任何输出的文字 D. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到运行期错误信息 正确答案为:B 第7题. 在Servlet中,response.getWriter()返回的是____________ A. JspWriter对象 B. PrintWriter对象 C. Out对象 D. ResponseWriter对象 正确答案为:B 第8题. 在web.xml中使用___________标签配置过滤器 A. B. C. D. 正确答案为:A 第9题. 自定义标签的描述文件在web.xml中配置正确的

java web拦截器配置及原理

java web 过滤器 (2013-03-01 10:04:24)本人转载收藏 ServletFilter,Servlet过滤器: Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术可以对web服务器管理的所有web资源:Jsp, Servlet, 静态图片文件或静态html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。ServletAPI提供了一个Filter接口,实现这个接口的Servlet就是一个过虑器。过虑器在WEB应用访问流程中如下: 由图可见,只要我们编写了过滤器,可以对一切访问WEB应用的连接进行过滤。比如,用户访问权限、统一WEB编码… Filter是如何实现拦截的? 实现了Filter接口的Servlet是过滤器,因为Filter接口有一个 doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法,只要用户访问我们在web.xml中配置的映射目录,服务器便会调用过滤器的doFilter方法。我们在这里实现过虑功能代码,当我们调用 chain.doFilter(request, response);方法时,将请求反给服务器服务器再去调用相当的Servlet。如果我们不调用此方法,说明拒绝了用户的请求。 Filter开发入门: 在WEB应用中添加一个过滤器,有两步工作需要完成: 1.编写实现了Filter接口的Servlet——过滤器。 2.在web.xml中配置过滤器: (1). 标签添加器 (2). 注册过滤器的映射目录(过滤目录),与注册Servlet一样。 在实际WEB应用中,我们可能需要编写多个过虑器,比如:1.统一WEB编码的过滤器(过虑所有访问)2.用户访问权限管理。这样,用户的访问需要选经过过滤器1过滤然后再经过过滤器2过滤。doFilter中有一个FilterChain参数,这个参数是服务器根据web.xml中配置的过滤器,按照先后顺序生成的过滤器链。当我们在doFilter方法中调用chain.doFilter(request, response);方法时,服务器会查找过滤链中是否还有过滤器,如果有继续调用下一个过滤器,如果没有将调用相应的Servlet处理用户请求。 Filter接口的其他细节: 1.Filter的Init(FilterConfig filterConfig)方法: 与Servlet的Init方法一样,在创建时被调用,之后被保存在内存中直至服务器重启或关闭时Filter实例才会被销毁。与Servlet不同之处在于,服务器启动时就会实例化所有Filter,而Servlet中有当用户第一次访问它时才会被实例化。我们通过在web.xml使用对Filter配置的初始化参数,可以通过FilterConfig来获得。 FilterConfig的方法有: String getFilterName():得到filter的名称。

java web 过滤器

传智播客java web 过滤器 今日学习Servlet的过滤器部分,百闻不如一见。以后我在课后做练习时,发现多个Servlet 之间转发容易产生问题。 详细出处参考:https://www.360docs.net/doc/7717466280.html,/article/21017.htm根本不利于使用,Servlet应该本是为简化工作而创造的啊!我当时觉得是我的设计框架产生了问题。第二天我便问方老师,确实是使用上有些问题。比如,显示访问计数,我把它单独写成了一个Servlet,什么地方需要它时,便由那个Servlet.include引用计数的Servlet。但这样总会产生一些问题和使用上的不便。比如include的Servlet必须使用相同的流,如果使用forward后任何输出都无效了。 方老师当时建议,把有些功能写到一起。但最后提到了过滤器,那时我便对过滤器产生了兴趣,今日也终于一睹芳容!让人十分喜欢! ServletFilter,Servlet过滤器: Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter 技术可以对web服务器管理的所有web资源:Jsp, Servlet, 静态图片文件或静态html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 ServletAPI提供了一个Filter接口,实现这个接口的Servlet就是一个过虑器。过虑器在WEB 应用访问流程中如下: 由图可见,只要我们编写了过滤器,可以对一切访问WEB应用的连接进行过滤。比如,用户访问权限、统一WEB编码… Filter是如何实现拦截的? 实现了Filter接口的Servlet是过滤器,因为Filter接口有一个doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法,只要用户访问我们在web.xml中配置的映射目录,服务器便会调用过滤器的doFilter方法。我们在这里实现过虑功能代码,当我们调用chain.doFilter(request, response);方法时,将请求反给服务器服务器再去调用相当的Servlet。如果我们不调用此方法,说明拒绝了用户的请求。 Filter开发入门: 在WEB应用中添加一个过滤器,有两步工作需要完成: 1.编写实现了Filter接口的Servlet——过滤器。 2.在web.xml中配置过滤器: (1). 标签添加器 (2). 注册过滤器的映射目录(过滤目录),与注册Servlet一样。 在实际WEB应用中,我们可能需要编写多个过虑器,比如:1.统一WEB编码的过滤器(过虑所有访问)2.用户访问权限管理。这样,用户的访问需要选经过过滤器1过滤然后再经过过滤器2过滤。doFilter中有一个FilterChain参数,这个参数是服务器根据web.xml中配置的过滤器,按照先后顺序生成的过滤器链。当我们在doFilter方法中调用chain.doFilter(request, response);方法时,服务器会查找过滤链中是否还有过滤器,如果有继续调用下一个过滤器,如果没有将调用相应的Servlet处理用户请求。 Filter接口的其他细节: 1.Filter的Init(FilterConfig filterConfig)方法: 与Servlet的Init方法一样,在创建时被调用,之后被保存在内存中直至服务器重启或关闭时Filter实例才会被销毁。与Servlet不同之处在于,服务器启动时就会实例化所有Filter,而Servlet中有当用户第一次访问它时才会被实例化。我们通过在web.xml使用对Filter配置的初始化参数,可以通过FilterConfig来获得。

过滤器与拦截器的区别

过滤器与拦截器的区别 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符 拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。 拦截器与过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起 作用。 4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器 初始化时被调用一次 执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。 面向切面编程(AOP是Aspect Oriented Program的首字母缩写),我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。 但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。

基于Spring WebFlux的拦截器实现

基于Spring WebFlux的拦截器实现

Spring WebFlux: 编写拦截器 Spring WebFlux是Spring 5+的一部分, 提供了一种新的响应性Web框架。在基于Spring MVC 的传统应用程序(Servlet Filter, HandlerInterceptor)中编写过滤器的方式与在基于Spring WebFlux的应用程序中编写过滤器的方式截然不同,本文将简单介绍使用WebFlux编写过滤器的方法。 方法1: WebFilter 使用WebFilter编写的拦截器会广泛影响到所有端点,并覆盖了用函数样式编写的WebFlux端点,以及使用注释样式编写的端点。. Kotlin中的WebFilter如下所示: @Bean fun sampleWebFilter(): WebFilter { return WebFilter { e: ServerWebExchange, c: WebFilterChain -> val l: MutableList = e.getAttributeOrDefault(KEY, mutableListOf()) l.add("From WebFilter") e.attributes.put(KEY, l) c.filter(e) } } WebFilter 只是添加了一个请求属性,该属性的值是一个集合。 方法2: HandlerFilterFunction 这种方法更加的专注于使用函数样式编写的端点。。这里我们参考下面的代码来使用RouterFunctions 来构建一个filter。 按照下面的办法设置Spring WebFlux 的端点:

相关文档
最新文档