基于Web服务的Acegi安全框架的研究与应用

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:xuq
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:分析了基于Web服务的Acegi安全框架的构架和实现原理,以Web服务中的HTTPForm为例,详细阐述了Acegi提供的认证和授权机制,并进一步探讨了Acegi安全框架的权限管理,以满足复杂的企业安全需求,从而提高了Web系统的安全性和稳定性。
  关键词:Web服务;认证;授权;权限管理
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)23-897-03
  Research and Application of Acegi Security Framework on Web Service
  LIU Zhen-hai, YIN Zhao-lin, GENG Wei
  (China University of Mining and Technology, Xuzhou 221008, China)
  Abstract: Acegi security framework on Web service is analysed. As an example of HTTPForm on Web service, authentication and authorization mechanisms is explicated elaborately. Moreover, this paper discusses purview management of Acegi framework to meet the complex security needs of enterprises and improve the Web system of security and stability.
  Key words: Web service; authentication; authorization; purview management
  
  1 引言
  
  随着Web服务技术的发展,安全性往往是企业信息化开发中最为重要的问题之一,如何更好地实现Web应用系统安全成为开发人员所面临的棘手问题。在企业的Web应用系统中,完善、灵活、高效的认证和授权机制是非常必要的,而且由于Web 业务需求面临着不断的变化,这些权限的认证和授权系统应该实现与已有的业务逻辑代码松耦合,传统的Java安全组件都不能很好地融入Web应用系统中,本文采用Spring Framework的Acegi安全框架来实现Web应用系统安全,它的架构和设计目标更符合企业级应用的需求。
  
  2 Acegi框架的安全管理对象
  
  Acegi是一个基于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用Spring的方式提供安全和认证服务,包括使用Bean Context,拦截器和面向接口的编程方式。通过精心配置Acegi安全系统,能够轻松地适用于复杂的安全需求。Acegi安全系统目前支持3类安全管理对象。
  1)MethodInvocation:开发人员可以用它来保护Spring容器中的业务对象。为了使Spring的管理Bean可以作为MethodInvocation使用,Bean可以通过ProxyFactoryBean和BeanNameAutoProxy-Creator来管理,就像在Spring的事务管理中一样使用。
  2)FilterInvocation:它通过过滤器(Filter)创建,并简单地包装了HTTP的ServletRequest、ServletResponse和FilterChain。FilterInvocation可以用来保护HTTP资源。通常,开发人员并不需要了解它的工作机制,因为他们只需要将Filter加入web.xml,Acegi安全系统就可以工作了。
  3)AspecctJ joinPoint:AspectJ是一个基于Java语言扩展的AOP实现,它提供了强大的AOP功能,在领域对象保护方面特别有用,这些领域对象绝大部分是在Spring容器之外被管理。通过使用AspectJ,一个标准的构造函数,例如:new Person(),能够在正常使用的同时,全面的被Acegi系统保护起来。AspectJSecurityInterceptor是由Spring进行管理的,Spring创建关于方面(aspect)的单实例对象,并且将它与相应的认证管理、存取管理等有效地编织在一起。
  每个安全管理对象都可以描述数量不限的各种安全认证请求。例如,FilterInvocation可以描述任意的HTTP URL,而MethodInvocation可以描述带有任意参数的任意方法的调用。
  
  3 Acegi安全框架的分析
  
  为实现对Web服务和POJO对象中方法的保护,Acegi提供了七项重要组件,分别是:
  1)Authentication,包含了Principal(用户),Credential(密码)和Principal的授权信息。同时,还可以包含关于发起认证请求的客户的其它信息,如IP地址;
  2)ContextHolder,使用ThreadLocal储存Authentication对象的地方;
  3)AuthenticationManager(认证管理器),用于认证ContextHolder中的Authentication对象;
  4)AccessDecissionManager(访问决定管理器),用于授权一个特定的操作;
  5)RunAsManager,当执行特定的操作时,用于选择性地替换Authentication对象;
  6)Secure Object拦截器,用于对用户进行认证、授权,或给它赋予不同的角色(RunAsManager);
  7)ObjectDefinitionSource,包含特定操作的授权定义。
  这7个关键的功能组件的关系如图1所示。
  
  4 Acegi安全框架的实现原理
  
  Acegi安全系统需要记录应用于每个认证请求的安全配置参数。为了保存不同的认证请求的安全配置,需要使用配置参数。从实现的视角来看,配置参数使用ConfigAttribute接口来表示Acegi安全系统提供了ConfigAttribute接口的一个实现SecurityConfig,它把配置参数保存为一个字符串。ConfigAttributeDefinition类是ConfigAttribute对象的一个简单的容器,它保存了和特定请求相关的ConfigAttribute的集合。
  在采用了Acegi框架的Web系统中,如果用户请求访问受保护的资源,Acegi就会对请求进行拦截,然后进行认证、授权;如果审查通过,则用户访问成功,否则失败。首先安全拦截器把获得的Authentication对象存在SecurityContextHolder中的ThreadLocal对象中;然后认证管理器从SecurityContextHolder取出用户信息,认证管理器的具体实现者DaoAuthenticationProvider从数据库取出用户信息,它通过比较从数据库获取的用户信息、密码以及从ThreadLocal里取出的Authentication对象中传入的主体、凭证完成身体验证。如果用户名、密码与主体、凭证分别匹配,则用户通过身份验证,同时返回给认证管理器一个已完全填充的Authentication对象,否则会抛出一个异常,表明验证失败;最后,如果认证成功,Acegi框架调用访问决策管理器来实现用户的授权。访问决策管理器的投票者根据用户具有的权限来对用户是否用权访问资源进行投票,Acegi框架根据投票结果进行判断用户是否有权访问资源,如图2所示。
  
  5 Web服务中Acegi框架的实现及权限管理
  
  5.1 Web服务中Acegi框架的实现
  这里以Web服务中的HTTPForm认证为例,说明Acegi认证和授权原理:
  1)首先通过HttpSessionContextIntegrationFilter初始化ContextHolder中的内容。如果session中已经存在Context,则直接初始化到ContextHolder中,否则创建一个新的Context,此时url为/j_secuirty_check。
  2)进入用户登录系统,Acegi从AuthenticationProcessingFilter中得到用户的登录信息(包括Principal和Credentia1),然后,调用AuthenticationManager进行认证。若认证通过,返回带有Principal授权信息的Authentication对象,此时ContextHolder中Authentication对象已拥有Principal的详细信息;若认证失败,则转到“authenticationFailureUrl”。用户从AuthenticationProcessingFilter中得到用户的登录信息,其配置如下:
  <bean id="authenticationProcessingFilter"
  class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
  <property name="authenticationManager><ref local="authenticationManager"/></property>
  <propertyname="authenticationFailureUrl"><value>/login.jsp?error=true</value></property>
  <property name="defaultTargetUrl"><value>/</value></property>
  <property name="filterProcessesUrl"><value>/j_security_check</value></property>
  </bean>
  3)用户登录成功后,继续进行业务操作。
  4)安全拦截器(filterInvocationInterceptor)收到客户端操作请求后,将操作请求的数据包装成安全管理对象(FilterInvocation对象)。然后,从配置文件(ObjectDefinitionSource)中读出相关的安全配置参数ConfigAttributeDefinition:
  <bean id="filterInvocationInterceptor"
  class="net.sf.acegisecurity.intercept.web.FilterSecuirtyInterceptor">
  <property name="authenticationManager"><ref local="authenticationManager"/></property>
  <property name="accessDecisionManager"><ref local="accessDecisionManager"/></property>
  <propertyname="objectDefintionSource">
  <value>CONVERT_URL_TO_LOW ERCASE_BEFLRE_CONPARISON
  PATTERN_TYPE_APACHE_ANT
  /signup.html*ROLE_ANONYM OUS,admin,tomcat
  /passwordhint.html*=ROLE_ANONYM OUS,admin,tomcat
  /**/*.html*=admin.tomcat
  /clickstreams.jsp*admin</value></property></bean>
  5)接着,安全拦截器取出ContextHolder中的Authentication对象,把它传递给AuthenticationManager进行身份认证,并用返回值更新ContextHolder的Authentication对象:
  6)将Authentication对象、ConfigAttributeDeifnition对象和安全管理对象交给AccessDecisionManager,检查Principal的操作授权;
  7)如果授权检查通过,则执行客户端请求的动作,否则拒绝。
  5.2 Acegi安全框架的权限管理
  企业级系统中,资源的权限配置一般将其存储在数据库中来管理。通过自定义的类urlDefinitionSource来实现权限配置信息向数据库的移植,它扩展了PathBasedFilterInvationDefinitionMap类,用作从数据库结构中读取权限配置信息并存储在内存中,其配置为:
  <bean id="urlDefinitionSource" class="sboss.framework.acegi.urlDefinitionSource">
  <property name="urlResourceProvider"><ref local="urlResourceProvider"/></property>
  </bean>
  <bean id="urlResourceProvider" class="sboss.framework.acegi.urlResourceProviderImpl">
  <property name="dataSource"><ref bean="dataSource"/></property>
  <property name="Cache"><ref local="sourceCache"></property>
  </bean>
  代码中,Cache是给urlResourceProvider加的一层缓存,目的在于把权限信息存于其中,避免反复的访问数据库影响系统性能。方法调用的拦截器MethodSecurityInterceptor与URL的拦截器有所不同,它是借助于Spring AOP实现的。但其配置与filterInvocationInterceptor类似,它的权限配置也涉及到面向数据库的移植,这里通过类businessDefinitionSource来实现,它扩展了MethodDefinitionMap类,用户从数据库结构中读取权限配置信息并存储在内存中。
  权限配置面向数据库的移植的过程中,我们加入了cache(缓存),其好处在于当系统读取一次权限配置信息后,即把该信息存于内存的cache中,当下次需要用到的时候,直接从cache中获取而不用再次去访问数据库,这会节约大量的系统性能。但这也带来另一个问题,如果通过系统操作改变了数据库中的权限配置,而cache中存储的是先前数据库中的信息,势必会导致权限的混乱。这时就需要对cache中的权限信息作数据同步处理。
  这里采用AOP技术来实现数据同步:利用Spring AOP拦截修改权限配置的业务方法,在该业务方法执行之后,重新从数据库读取权限配置信息放入cache中。该过程通过自定义的拦截器retrieveDefinitionSourceInterceptor来实现。配置如下:
  <bean id="retrieveDefinitionSourceInterceptor"
  class="org.springframework.aop.RegexpMethodPointcutAdvisor">
  <property name="advice"><ref bean="refreshResourceCache"/></property>
  <property name="pattern">
  <list><value>sboss.framework.web.action.RoleAction.add</value>
  <value>sboss.framework.web.action.RoleAction.update</value></list></property>
  </bean>
  类refreshResourceCache实现从数据库重新读取权限配置信息再存入cache。
  
  6 结束语
  
  本文主要探讨的将Acegi安全框架应用于Web服务中的方法对于构建安全的系统具有重要的参考意义,同时解决了Web服务中的权限管理问题,实现了数据的同步处理,提高了Web服务系统的安全性。
  
  参考文献:
  [1] 夏榆滨,宣明付.基于RBAC的统一权限管理系统研究[J].微计算机信息,2006,22(30):114-116.
  [2] 罗时飞.精通Spring[M].北京:电子工业出版社,2005.
  [3] Acegi Security System contactssample[EB/OL].http://acegisecurity.org.
  [4] Joseph D,Nicholas Lesiecki.精通AspectJ[M].北京:清华大学出版社,2005.
  [5] 魏楚元,李陶深,张增芳.J2EE安全机制的分析与研究[J].计算机工程与设计,2005,26(6):1434-1437.
其他文献
摘要:传统DSS基于业务系统数据库从而缺乏统一、充足的数据源支持,这严重影响了DSS的发展。数据仓库的出现解决了DSS应用的一大难题。该文以江西省社会保险DSS为应用实例,给出了社保数据仓库的具体设计与实现过程。  关键词:数据仓库;决策支持系统;社会保险  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)23-869-03  Design and Implementa
期刊
摘要:Web技术正在迅速成为支持企业范围应用程序的优选平台,基于Windows DNA的三层结构体系框架分布式应用程序已经成为计算主流。在比较详尽地论述了三层结构框架的整体构建思想基础上,示例了分布式应用程序的设计和实现过程。  关键词:Windows DNA;分布式应用程序;三层结构;XML Web services  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)
期刊
摘要:阐述了DDoS攻击的原理与方法,详细介绍了DDos攻击的实现。  关键词:拒绝服务;DDoS;DDoS攻击  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-881-02  随着网络技术和网络应用的发展,网络安全问题显得越来越重要。拒绝服务攻击由于具有容易实施、难以防范、难以追踪等特点而成为最难解决的网络安全问题之一,给网络社会带来了极大的危害。同时,拒绝服
期刊
摘要:该文针对目前医药供应链信息系统中各企业信息和业务难以共享的现状,提出了以SOA体系架构来实施医药供应链共享平台的方案,可以有效解决供应链过程中各企业信息和业务的共享问题。文中分析了医药供应链系统中的服务功能模块,根据功能模块讨论了系统实现模型与实现方法。  关键词:SOA;信息共享;医药供应链  中图分类号:TP335文献标识码:A文章编号:1009-3044(2008)23-852-02 
期刊
摘要:互联网方便快捷的特点使得电子文件被广泛地使用,但由于互联网的开放性,使得电子文件在传输时存在着信息安全的隐患。在简要介绍了PKI(公钥基础设施)的基本概念、基本组成及运行模式的基础上,提出了一种解决这些安全隐患的应用方案,并详细介绍其具体流程,实现了安全文件传榆的身份认证、保密性、完整性和不可否认性等要求。  关键词:PKI;数字签名;数字证书;身份认证  中图分类号:TP393文献标识码:
期刊
摘要:该文介绍了网络登陆与普通系统登陆的功能区别,提出了实现网络登陆的实现解决措施,并通过UML对网络登陆系统进行建模,保证了系统的完善性和可靠性。  关键词:网络登陆;UML;系统建模  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-954-02  UML Design for Network Login System   XIA Zhong-hua, ZHA
期刊
摘要:文章探讨了VPN 及其具体实现技术——隧道技术。首先介绍了VPN的概念,接着探讨了VPN的工作原理,最后详细分析了VPN的隧道技术,特别是L2TP隧道协议。  关键词:VPN;隧道技术;L2TP  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-879-02  VPN and It's Tunneling Technology Research  CHEN
期刊
摘要:该文以湖南交通职业学院的校园网为背景,从校园网内网安全威胁的特点和攻击原理入手,解析了如何利用VLAN技术保障校园网内网安全。  关键词:VLAN技术;校园网;内网安全  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-913-02  How to Support Campus Net the Net Security Use VLAN Technical 
期刊
摘要:探讨了软件逆向工程的基本原理,基于OnTrac平台设计了一个针对 Python源代码的逆向分析系统,并简要介绍ReverseUML系统以及核心模块。  关键词:逆向工程;Python;UML;类图;序列图  中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)23-969-02  Design of Reverse Analysis System Based on O
期刊
摘要:当前,网络信息资源呈现爆炸式增长趋势,用户对信息查询的要求也越来越高,传统的各种信息查询技术已经很难满足这种要求。未来的因特网作为人类的信息库、知识库,应该支持用户以自然语言的方式来完成信息查询,并具备理解语义,进行自动扩展、联想的智能化查询系统。该文提出一个基于Ontology的信息查询系统模型,实现支持自然语言的理解和语义层面的智能化查询功能。  关键词:本体;信息查询;自然语言理解  
期刊