,欢迎光临!
加入收藏设为首页请您留言
您当前位置:网站首页 >> 过滤器新闻 >> Servlet过滤器在用户认证中的应用-上海联兵环保免费电话:400-600-5030

Servlet过滤器在用户认证中的应用-上海联兵环保免费电话:400-600-5030

2011-09-13 16:21:29 来源:中国过滤器网 浏览:2

摘 要:针对Web应用组件开发中出现的配置复杂和登录认证编码冗长等问题,分析了Servlet过滤器的特点和功能,论述了Servlet过滤器的工作过程以及组成Servlet过滤链的部署与实现方式.提出了用Servlet过滤链简化数据库登录认证配置的方案.
关键词:过滤器;认证;过滤链
中图分类号:TP 393.08
文献标识码:A
引 言
在项目开发中,经常会遇到来自客户端对某些相关页面进行统一编码的请求,以及对客户端进行统一认证和处理的情形.
例如:在实现数据库的连接中,需要获得不同的属性.通常直接将数据库的连接属性写在程序中,这样一旦数据库的连接属性发生改变,就需要重新编译源文件.另外,特殊受限页面(特别是登录页面),只有通过授权的用户才能访问.如果每个页面都部署授权验证代码,不仅编程困难而且代码冗长,不利于阅读、修改和维护.程序的移植和配置也要花费不少时间.
上述情况可以通过开发一组过滤器予以解决,每个过滤器只执行某个特定操作或检查,用户的请求在到达被访问的目标之前需要经过整个过滤链.如果由于安全的问题,过滤链就可以拦截客户端的请求.
1 Servlet过滤器
Servlet过滤器是J2EE Web应用程序级的Java代码组件,是一种类似于Servlet、由容器管理的对象,它能够以声明的方式插入到HTTP请求响应的过程中.除了Servlet和JSP页面以外,遵循Servlet 2.3以上规范编码的开发,可以将过滤器作为活动行为的机制加入Web应用程序中.Servlet过滤器具有以下特点[1]:
(1) Servlet过滤器是Java Servlet规范2.3的一部分,因此所有实现Java Servlet规范2.3的Servlet容器都支持Servlet过滤器;
(2) Servlet过滤器可以检查和修改ServletRequest和ServletResponse对象;
(3)可以指定Servlet过滤器和特定的URL关联,只有当客户请求访问此URL时,才会触发过滤器工作;
(4)独立的Servlet可以串联在一起,形成管道效应,协同修改请求和响应对象.
Web应用中的过滤器截取从客户端进来的请求,并做出处理和答复,可以说是外部进入网站的第一道关卡,在这里可以验证客户是否来自可信的网络,对客户提交的数据进行重新编码、压缩或加密,从系统的获得配置信息,过滤掉客户的某些不应出现的词汇,验证是否已经登录或是否为授权用户,验证客户的浏览器是否支持当前的应用,记录系统的日志、图像转换、XML转换等等[2].
过滤器接入J2EE容器的处理管道,能跨越由Web应用程序提供的URL子集(或所有URL)进行工作.过滤器配合J2EE请求处理的过程如图所示[1].

2 Servlet过滤器工作过程
使用一个过滤器链的应用的任务包含以下三个方面[3]:
(1)编写Filter;
(2)编写自定义请求及响应;
(3)为每个网络资源指定过滤链.
所有的过滤器必须实现javax.servlet.Filter接口,这个接口定义了以下三个过滤器类必须实现的方法:
(1) init(FilterConfig filterConfig):用于初始化Filter,它一般从配置描述符中获得一些参数的值(即通过读取web.xml文件中Servlet过滤器的初始化参数);
( 2 ) doFilter ( ServletRequest srequest,ServletResponse sresponse,FilterChain chain) :
用于执行具体的实际过滤操作.当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法.FilterChain参数用于访问后续的过滤器.
(3) destroy():销毁过滤器.在过滤器执行Service后被调用,释放Servlet过滤器占用的资源.
其中,最重要的是用于执行具体过滤逻辑的doFilter()方法.在doFilter()方法中,每个过滤器接收当前的请求和响应,然后通过调用它们的方法收集数据,或者给对象添加新的行为.
过滤器调用chain.doFilter()将控制权传送给下一个过滤器.当这个调用返回后,过滤器可以在它的doFilter()方法的最后对响应做些其他的工作,例如,它能记录响应的信息.如果过滤器想要终止请求的处理获得对响应的完全控制,它可以不调用下一个过滤器.执行完了过滤操作后,它需要执行chain.doFilter(srequest,sresponse);
来把控制权转让给下一个过滤器.如果没有下一个过滤器,那么将调用目标资源.而FilterChain包含的过滤器则仍然必须被处理.
服务器必须调用一次init(FilterConfig)为服务准备过滤器,然后在请求需要使用过滤器的任何时候调用doFilter().FilterConfig接口用于检索过滤器名、初始化参数及活动的Servlet上下文.服务器调用destory()使得过滤器结束服务.过滤器的生命周期和Servlet的生命周期非常相似,它有实例化、初始化、过滤和销毁的生命周期过程,不同的是向外提供服务的方法不同.
3 Servlet过滤链的部署和应用
可以为一个Web应用组件部署多个过滤器,这些过滤器组成一个过滤链,串联起来协同工作,Servlet容器将根据它们在web.xml中定义的先后顺序,依次调用它们的doFilter()方法,从而创建一个功能完善的过滤体系.
HRMS系统是一个人事管理系统,系统设置了5个一级菜单,依次是系统维护、人事管理、考勤应用设置、考勤管理和联机帮助.由于此系统要求能实现在简体中文、繁体中文、英文三种界面之间切换操作,因此在登录进入系统的过程中设置了3个过滤器.第一个过滤器负责数据库的连接.
第二个过滤器负责语言选择,第三个过滤器负责登录验证,这三个过滤器组成一个过滤链.
系统的初始化全局变量声明存放在WEBINF/web.xml中.web.xml由一系列的元素组成.每个元素由两个属性组成.属性指定参数的名字,指定参数的值.

全局配置信息存放在ServletContext()中,第一个过滤器的init(FilterConfig config)方法初始化数据库的配置信息、doFilter()负责读取这个配置信息,这个对象在服务器启动的时候自动创建,所有组件均可引用,更改配置信息后只需重新启动服务器就能生效.经过第一个过滤器的数据库连接验证通过后,第二个过滤器接收客户端发送到JSP服务器的request请求,根据客户端语言cookie (或session)变量设置服务器端的编码方法为“gb2312”(简体中文)、“big5”(繁体中文)或“ISO 8859 1”(英文).此过程通过它的doFilter()的getCookies()方法获得:Cookie[] cookies=hreq.getCookies(),然后将处理权提交到下一个过滤器.第三个过滤器负责验证用户的登录信息:用户登录后,服务器记录当前用户的状态,并存入session.根据客户session判断客户是否登陆,若未登陆,则将客户转向到登陆页面,否则将处理权提交到下一个处理部件,对应的JSP文件接管处理权,响应客户端请求.
在发布Servlet过滤器时,必须在web.xml中加入元素和元素定义一个过滤器.属性指定过滤器的名字,属性指定过滤器的类名.属性指定过滤器的URL,当客户请求的URL和指定的URL匹配时,将触发此过滤器工作.例如:

此定义让名为IninialApplication2的Servlet过滤器过滤所有的URL.可以根据需要设置其中的url pattern,将需要过滤的页面配置进来,而不必每个页面都添加授权验证代码.Servlet过滤器使代码简洁,利于阅读、修改和维护.此应用中用到三个过滤器,所以在web.xml中必须为这个三个过滤器进行定义.按照在web.xml定义的先后顺序,这三个过滤器组成一个过滤链,串联起来协同工作.Servlet容器根据过滤器在web.xml中定义的先后顺序,依次调用其中的doFilter()方法,创建一个功能完善的过滤链.
在使用了Servlet过滤器构建过滤链的基础上,HRMS系统还采用了JDBC数据库连接模式,标准SQL访问语言,对整个系统的配置采取了XML参数化,从而方便地支持了跨数据库运行.
4 结 语
Servlet过滤器是Servlet的扩展,而JavaServlet是采用Java编程语言编写的,Servlet过滤器继承了Java语言及Servlet的优点和特长,诸如平台无关性、垃圾回收、多线程、速度快、占用资源少、协议无关、安全性高以及同步技术等.在Web应用组件开发中恰当地部署使用Servlet过滤器,可以有效解决配置复杂和登录认证编码冗长等问题,进一步提高系统的安全稳定性.

 

上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com

 

发表评论
网名:
评论:
验证:
共有0人对本文发表评论查看所有评论(网友评论仅供表达个人看法,并不表明本站同意其观点或证实其描述)
赞助商链接
关于我们 - 联系我们 - 咨询联兵