欢迎来到天天文库
浏览记录
ID:27092821
大小:55.00 KB
页数:8页
时间:2018-12-01
《基于spring框架应用的权限控制系统的研究和实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于Spring框架应用的权限控制系统的研究和实现摘要Spring框架是一个优秀的多层J2EE系统框架,Spring本身没有提供对系统的安全性支持。Acegi是基于SpringIOC和AOP机制实现的一个安全框架。本文探讨了Acegi安全框架中各部件之间的交互,并通过扩展Acegi数据库设计来实现基于Spring框架的应用的安全控制方法。关键词Spring;Acegi;认证;授权.L.编辑。1引言近年来,随着Inter技术的迅猛发展,计算机网络已深入到了人们的工作、学习和日常生活中,于是,怎样构建安全的ming)的构架多层J2EE应用系统的框架。Spring框架正在
2、以其优良的特性吸引了越来越多的开发人员的关注,并在大量的系统开发中被使用。然而,现有的Spring框架本身并没有提供对系统安全性的支持,本文通过介绍一种可用于Spring框架中的安全框架Acegi,并对在Spring框架中使用Acegi实现安全用户认证和资源授权控制进行了较深入的研究和扩展,同时给出了可行的解决方案。2Spring框架和Acegi安全框架介绍2.1spring框架Spring框架是由OpenSource开发的一个优秀的多层J2EE系统框架,它为企业级应用提供了一个非常轻量级的解决方案,大大地降低了应用开发的难度与复杂度,提高了开发的速度。Spring
3、框架的核心是IoC和AOP。IoC是一种设计模式,即IoC模式。IoC模式进一步降低了类之间的耦合度,并且改变了传统的对象的创建方法,实现了一种配置式的对象管理方式,Spring框架中由IoC容器负责配置性的对象的管理。IoC模式极大的提高了系统开发与维护的灵活性。AOP是一种编程模式,它是从系统的横切面关注问题。传统的面向对象编程OOP主要从系统的垂直切面对问题进行关注,对于系统的横切面关注很少,或者说很难关注,这样当考虑到系统的安全性、日志、事务以及其他企业级服务时,OOP就无能为力了,只能在所有相关类中加入类似的系统服务级的代码。AOP为解决系统级服务问题提供
4、了一种很好的方法。AOP将系统服务分解成方面看待,并为类提供一种声明式系统服务方式。Java类不需要知道日志服务的存在也不需要考虑相关的代码。所以,用AOP编写的应用程序是松耦合的,代码的复用性就提高了。2.2Acegi安全框架借助于Spring框架,开发者能够快速构建结构良好的anager、实现用户授权的AccessDecisionManager以及实现角色转换的RunAsManager。安全管理对象、拦截器以及安全控制管理组件三者关系如图1所示。3Acegi安全框架在基于Spring框架的系统中的应用3.1分析系统安全性需求首先,需要明确进行安全控制的对象,可为
5、业务方法和URL资源。其次,需要进一步明确,系统身份认证资料和资源授权信息的数据持久化形式。3.2Acegi安全系统数据库设计在Acegi框架中支持多种安全信息的持久化方式,可以在配置文件中配置或存放在关系数据库。由于在实际应用中,需求是经常发生变化的。所以,在配置文件中配置是满足不了实际应用需求的。然而,Acegi本身对权限表的设计非常简单,users表{username,passe,authority},这样简单的设计肯定无法适用复杂的权限需求。为了解决权限管理的复杂性,在这里引入了role(角色)的概念,使得用户和权限分离,一个用户拥有多个角色,一个角色拥有多
6、个相应的权限,这样就更灵活地支持安全策略。同时,为了更好地配合Acegi安全框架,还引入resource(资源)的概念,资源可分为URL和FUNCTION(方法)两种,一个权限可以对应多个资源。具体的数据库设计见图2。图1安全管理对象,拦截器和安全管理组件交互图图2Acegi安全控制系统数据库设计3.3认证管理器,授权管理器的配置实现系统的安全控制,首先需要对系统的安全管理器和授权管理器进行配置,系统进行认证和授权需要获取安全信息,Acegi本身提供了对认证信息的获取机制,在实现认证与授权过程中,系统将主动根据配制信息和相应的信息解释安全信息的读取。图3给出了一个将
7、用户安全信息存储在数据库中的认证管理器的配置示意图。对应于图示的XML配置文件的代码如下:/*配置数据库datasource和Acegi的jdbcDao*/<beanid=”dataSource”class=”org.springframee=”driverClassName”><value>${jdbc.driverClassName}</value></property><propertyname=”url”><value>${jdbc.url}</value></pr
此文档下载收益归作者所有