Java Web应用中基于Filter的访问权限控制实现

2017-03-06 23:31向大芳
软件导刊 2017年1期

向大芳

摘要摘要:简要描述了常规使用Java脚本实现的jsp页面访问权限控制,并详细阐述了Filter的基本原理和实现方式。在此基础上,运用Filter构建访问权限控制方案,并将其与Java脚本方案进行对比分析。结果表明,使用Filter对用户请求进行预处理,实现对jsp页面访问权限进行控制的方案,具备开发容易、效率高的优势。

关键词关键词:Java;服务请求;Web应用

DOIDOI:10.11907/rjdk.161995

中图分类号:TP312文献标识码:A文章编号文章编号:16727800(2017)001004103

0引言

实现对页面访问权限的控制是所有Web应用中一个无法回避的问题,对于Java Web应用而言,惯常的做法是使用Java脚本来实现,但这种实现方式比较繁琐,需要在每个要求控制的页面上都添加控制脚本。该方式还有一个更致命的问题:当控制代码发生改变时,修改维护的工作量极大。Filter又称过滤器,是从Servlet2.3开始增加的功能,它可以改变用户Request请求和修改一个Response响应[13]。充分利用Filter过滤器的这一特性使得程序员可以在用户请求页面资源时,拦截request请求并进行权限验证,从而拒绝非法访问请求。

本文将分别运用Java脚本和Filter过滤器来实现访问权限控制,并对两种方案的优劣进行对比分析。1基于Java脚本方案的访问权限控制实现

在Filter出现之前,在Java Web应用中实现访问权限控制最常见的方案就是Servlet+Java脚本。其基本原理是Servlet控制器负责处理请求并进行用户合法性验证,Java脚本负责页面访问权限控制。

当用户通过浏览器发出登录请求Request时,该请求会被交给负责控制登录请求的控制器Servlet,Servlet控制器则调用Service方法进行响应。该方法的原型如下:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

登录请求参数的传递有两种方式:一种是Get方式,另一种是Post方式。根据请求参数传递方式的不同,Service方法调用不同的处理请求方法:doGet和doPost。其中doGet方法用于处理Get方式的请求,doPost方法用于处理Post方式的请求。通过表单Form登录通常采用的是Post请求方式,因此需要在doPost方法中实现对用户合法性进行验证,如果验证通过则将验证通过标识或者用户名等标识符以keyvalue键值对的形式保存在本次会话的HttpSession类型的实例化Session对象中。

假设登录页面文件为login.jsp,登录成功的目标页面为xx.jsp,表单Form的登录请求参数被封装为一个对象loginUser,该对象具有获取用户名的方法getName(),判断用户合法性的方法原型为:

当Web应用启动时会去装载Filter接口的实现类,Web容器首先实例化Filter实现类,并通过该实例对象调用其init()方法进行初始化。初始化完成的Filter对象被Web容器保存进应用级的集合容器中去等待用户访问资源。当用户访问的资源与web.xml配置文件中配置的Filter的url-pattern相匹配时,该请求即被拦截,此时,容器会取出Filter实例对象调用其doFilter方法。當应用服务被停止或重新装载时,则会执行Filter实例化对象的destroy方法将该对象销毁。

如前所述,编译完成后的Filter实现类字节码文件(.class文件)并不具备对各种请求进行拦截过滤处理的能力,开发人员还必须在Web应用中对Filter进行一系列的配置。配置Filter有两种方式:一种是在web.xml文件中进行配置,另外一种是在Filter实现类中使用Annotation注解@WebFilter方式进行配置。

3基于Filter方案的访问权限控制实现

使用Filter实现Java Web应用中的页面访问权限控制比较容易,与Java脚本方案相同的是在处理登录请求的Servlet中,将验证通过标识符或者用户名等标识符以keyvalue键值对的形式保存在HttpSession实例对象中。然后编写用于用户访问权限控制的过滤器类,假定过滤器类名为CheckFilter,则该类的声明如下:

public class CheckFilter implements Filter;

在该过滤器类的doFilter方法里,尝试从HttpSession实例对象中获取保存登录验证通过标识符的keyvalue键值对。如果该键值对存在,则说明该用户是通过登录验证的用户,放行请求,否则强制跳转至登录页面。

假设Session中保存登录验证通过标识符的keyvalue键值对的key值为user,登录页面为login.jsp。则实现访问权限控制的核心代码如下:

4结语

在几乎所有的Java Web应用中都存在用户访问权限控制的需求,实验结果表明,采用Java脚本方案进行访问控制,即便是采用改进型的方案,需要在大量的jsp页面中编写访问控制代码,极其繁琐。而采用Filter过滤器实现用户访问控制,实现简便,配置完成后,即可对需要进行访问控制的页面进行自动过滤,无需修改任何jsp页面的代码,开发效率高且维护方便。在Web应用规模和控制逻辑复杂程度增大的情况下,Filter方案相比传统的Java脚本方案极具优势。参考文献:

[1]李刚.JSP/Servlet及相关技术详解[M].北京:电子工业出版社,2013.

[2]王鑫印.基于Filter技术的Web个性化服务应用研究[J].微机发展,2003(12):9395.

[3]Alur D.J2EE核心模式[M].北京:机械工业出版社,2002.

[4]李建.Java Web开发中过滤器组件应用及实例解析[J].电脑开发与应用,2009(11):58.

[5]张庆辉,李海涛.基于XML与FILTER的Web访问[J].电脑知识与技术,2009(36):1058710589.

[6]李博文.浅谈运用Java Web解决用户登录的安全问题[J].信息科技,2011(1):195196.

责任编辑(责任编辑:孙娟)

第1期 吴思颖,李亚楠,王年丰,等:基于双处理器的四旋翼飞行控制系统研究软 件 导 刊2017年标题