实现基于Spring框架应用的权限控制系统计算机论文_工学论文_.doc_第1页
实现基于Spring框架应用的权限控制系统计算机论文_工学论文_.doc_第2页
实现基于Spring框架应用的权限控制系统计算机论文_工学论文_.doc_第3页
实现基于Spring框架应用的权限控制系统计算机论文_工学论文_.doc_第4页
实现基于Spring框架应用的权限控制系统计算机论文_工学论文_.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

资料分享大全-分享无极限实现基于Spring框架应用的权限控制系统计算机论文_工学论文摘要Spring框架是一个优秀的多层JEE系统框架,Spring本身没有提供对系统的安全性支持。Acegi是基于SpringIOC和AOP机制实现的一个安全框架。本文探讨了Acegi安全框架中各部件之间的交互,并通过扩展Acegi数据库设计来实现基于Spring框架的应用的安全控制方法。关键词Spring;Acegi;认证;授权引言近年来,随着Internet技术的迅猛发展,计算机网络已深入到了人们的工作、学习和日常生活中,于是,怎样构建安全的web应用也成为了当前最热门的话题。Spring是一个基于IoC(InversionofControl)和AOP(AspectOrientedProgramming)的构架多层JEE应用系统的框架。Spring框架正在以其优良的特性吸引了越来越多的开发人员的关注,并在大量的系统开发中被使用。然而,现有的Spring框架本身并没有提供对系统安全性的支持,本文通过介绍一种可用于Spring框架中的安全框架Acegi,并对在Spring框架中使用Acegi实现安全用户认证和资源授权控制进行了较深入的研究和扩展,同时给出了可行的解决方案。Spring框架和Acegi安全框架介绍、spring框架Spring框架是由OpenSource开发的一个优秀的多层JEE系统框架,它为企业级应用提供了一个非常轻量级的解决方案,大大地降低了应用开发的难度与复杂度,提高了开发的速度。Spring框架的核心是IoC和AOP。IoC是一种设计模式,即IoC模式。IoC模式进一步降低了类之间的耦合度,并且改变了传统的对象的创建方法,实现了一种配置式的对象管理方式,Spring框架中由IoC容器负责配置性的对象的管理。IoC模式极大的提高了系统开发与维护的灵活性。AOP是一种编程模式,它是从系统的横切面关注问题。传统的面向对象编程OOP主要从系统的垂直切面对问题进行关注,对于系统的横切面关注很少,或者说很难关注,这样当考虑到系统的安全性、日志、事务以及其他企业级服务时,OOP就无能为力了,只能在所有相关类中加入类似的系统服务级的代码。AOP为解决系统级服务问题提供了一种很好的方法。AOP将系统服务分解成方面看待,并为类提供一种声明式系统服务方式。Java类不需要知道日志服务的存在也不需要考虑相关的代码。所以,用AOP编写的应用程序是松耦合的,代码的复用性就提高了。、Acegi安全框架借助于Spring框架,开发者能够快速构建结构良好的WEB应用,但现有的Spring框架本身没有提供安全相关的解决方案。同样来自于OpenSource社区的Acegi安全框架为实现基于Spring框架的WEB应用的安全控制提供了一个很好的解决方案。Acegi本身就是利用Spring提供的IoC和AOP机制实现的一个安全框架,它将安全性服务作为JEE平台中的系统级服务,以AOPAspect形式发布。所以借助于Acegi安全框架,开发者能够在Spring使能应用中采用声明式方式实现安全控制。Acegi安全框架主要由安全管理对象、拦截器以及安全控制管理组件组成。安全管理对象是系统可以进行安全控制的实体,Acegi框架主要支持方法和URL请求两类安全管理对象;拦截器是Acegi中的重要部件,用来实现安全控制请求的拦截,针对不同的安全管理对象的安全控制请求使用不同的拦截器进行拦截;安全控制管理部件是实际实现各种安全控制的组件,对被拦截器拦截的请求进行安全管理与控制,主要组件包括实现用户身份认证的AuthenticationManager、实现用户授权的AccessDecisionManager以及实现角色转换的RunAsManager。安全管理对象、拦截器以及安全控制管理组件三者关系如图所示。Acegi安全框架在基于Spring框架的系统中的应用、分析系统安全性需求首先,需要明确进行安全控制的对象,可为业务方法和URL资源。其次,需要进一步明确,系统身份认证资料和资源授权信息的数据持久化形式。、Acegi安全系统数据库设计在Acegi框架中支持多种安全信息的持久化方式,可以在配置文件中配置或存放在关系数据库。由于在实际应用中,需求是经常发生变化的。所以,在配置文件中配置是满足不了实际应用需求的。然而,Acegi本身对权限表的设计非常简单,users表username,password,enabled和authorities表username,authority,这样简单的设计肯定无法适用复杂的权限需求。为了解决权限管理的复杂性,在这里引入了role(角色)的概念,使得用户和权限分离,一个用户拥有多个角色,一个角色拥有多个相应的权限,这样就更灵活地支持安全策略。同时,为了更好地配合Acegi安全框架,还引入resource(资源)的概念,资源可分为URL和FUNCTION(方法)两种,一个权限可以对应多个资源。具体的数据库设计见图。图安全管理对象,拦截器和安全管理组件交互图图Acegi安全控制系统数据库设计、认证管理器,授权管理器的配置实现系统的安全控制,首先需要对系统的安全管理器和授权管理器进行配置,系统进行认证和授权需要获取安全信息,Acegi本身提供了对认证信息的获取机制,在实现认证与授权过程中,系统将主动根据配制信息和相应的信息解释安全信息的读取。图给出了一个将用户安全信息存储在数据库中的认证管理器的配置示意图。对应于图示的XML配置文件的代码如下:/*配置数据库datasource和Acegi的jdbcDao*/beanid=”dataSource”class=”org.springframework.jdbc.datasource.DriverManagerDataSource”propertyname=”driverClassName”value$jdbc.driverClassName/value/propertypropertyname=”url”value$jdbc.url/value/property图认证管理器配制示意图propertyname=”username”value$jdbc.username/value/propertypropertyname=”password”value$jdbc.password/value/property/beanbeanid=”jdbcDaoImpl”class=”org.acegisecurity.roviders.dao.jdbc.JdbcDaoImpl”propertyname=”dataSource”refbean=”dataSource”/property/bean/*配置用户信息的加密算法*/beanid=”passwordEncoder”Class=”viders.encoding.MdpasswordEncoder”/*配置缓存有效时间*/beanid=”userCache”class=”org.acegiSviders.dao.cache.EhCacheBasedUserCache”/这里对缓存有效时间进行设置/bean/*配置daoAuthenticationProvider*/beanid=”daoAuthenticationProvider”class=”viders.dao.DaoAuthenticationProvider”propertyname=”authenticationDao”reflocal=”JdbcDaoImpl”/propertypropertyname=”passwordEncoder”reflocal=”passwordEncoder”/propertypropertyname=”userCache”reflocal=”userCache”/property/bean/*配置认证管理器*/beanid=”authenticationManager”class=”viders.ProviderManager”propertyname=”providers”listreflocal=”daoAuthenticationProvider”/list/property/bean授权管理器的配置方法与认证管理器的配置基本类似,这里不再讨论。、安全请求拦截器的配置以上配置完成后,就需要配置安全拦截器。不同的安全管理对象需要使用不同的安全拦截器。对于方法级的安全认证需要使用的拦截器为MethodSecurityInterceptor,而应用于URL资源的安全拦截器为FilterSecurityInterceptor。其中,MethodSecurityInterceptor拦截器是借助于SpringAop实现的,而FilterSecurityInterceptor拦截器是借助于ServletFilter实现的。本文以URL资源请求的安全拦截器为例说明配置情况。由于URL资源请求安全拦截是借助于过滤器进行的。因此首先要配置AcegiServlet过滤器。过滤器类似于AOPAround装备,实现在web资源调用前后进行的一些操作种过滤器,他们依次构成Servlet过滤器链,依次处理客户请求。需要注意的是过滤器配置的顺序是不能交换的,当不需要使用某个过滤器时,可直接将其删除和注释。过滤器在web.xml中配置形式为filterfilter-nameAcegiHTTPRequestSecurityFilter/filter-namefilter-classorg.acegisecurity.util.FilterToBeanProxy/filter-classinit-paramparam-nametargetClass/param-nameparam-valueOercept.web.SecurityEnforcementFilter/param-value/init-param/filterfilter-mappingfilter-nameAcigiHTTPRequestSecurityFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping在springapplicationContext.xml文件中的配置形式为beanid=”securityEnforcementFilter”class=”propertyname=”filterSecurityInterceptor”refbean=”filterInvocationInteceptor”/propertypropertyname=”authenticationEntryPoint”refbean=”authenticationProcessingFilterEntryPoint”/property以上代码是SecurityEnforcementFilter的配置,该过滤器对用户是否有权访问web资源作出最后的决定。其它的过滤器的配置类同。配置完过滤器后,需要对拦截器FilterSecurityInterceptor进行配置,beanid=”filterInvocationInterceptor”Class=”propertyname=”authenuserCacheticationManager”propertyname=”accessDecisionManager”propertyname=”objectDefinitionSource”reflocal=filterObjectDefinitionSource/propertybeanid=filterObjectDefinitionSourceclass=org.xiaohongli.acegi.db.DBFilterObjectDefinitionSourceconstructor-argrefbean=jdbcTemplate/constructor-arg/beanobjectDefinitionSource属性定义了那些受保护的URL资源,其中引用了一个本地对象filterObjectDefinitionSource。filterObjectDefinitionSource类从数据库中读取需要保护的URL安全信息,它扩展了PathBasedFilterInvocationDefinitionMap类。同样,实现了另外一个methodObjectDefinitionSource类从数据库中读取需要保护的FUNCTION资源,它扩展了MethodDefinitionMap类。限于篇幅,在这里就不列出具体实现的源代码。beanid=methodObjectDefinitionSourceclas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论