基于Spring的安全框架Acegi在信息系统中的应用与研究

关键词: 进行 需要 企业级 保护

权限系统在一个Web系统中是很重要的一部分, 大部分的企业级应用都需要3种基本的安全保护: (1) 需要对信息系统请求进行保护; (2) 需要对服务层方法进行保护; (3) 需要对领域对象进行保护。为了实现保护, 首先要对访问的用户进行身份认证和授权, 即Who+What+How的问题。不同的用户可以访问的资源不同。而Acegi不仅可以控制前两种权限, 而且通过ACL (访问控制列表) 可以保护领域对象, 即到细粒度。不需要编写任何安全代码, 只要在配置文件中定义即可, 真正作到安全逻辑与业务逻辑分离。

1 Acegi介绍

Acegi是一个基于Spring Framework的安全框架, 能够和目前流行的信息系统容器无缝集成。它使用了Spring的方式提供了安全和认证服务, 包括使用Bean Context, 拦截器和面向接口的编程方式。通过精心配置Acegi安全系统能够轻松地适用于复杂的安全需求。

Acegi安全系统目前支持3类安全管理对象。

第1类是Filter Invocation。它用过滤器 (Filter) 来创建, 并简单地包装了HttP的Servlet Request, Servlet Response和FilterChain。通常, 开发人员并不需要了解它的工作机制, 因为他们只需要将Filter加入信息系统.xml, Acegi安全系统就可以工作了。

第2类是MethodInvocation, 开发人员可以用它来保护Spring容器中的业务对象。为了使Spring管理的Bean可以作为Method Invocation来使用, Bean可以通过ProxyFactoryBean和BeanNameAutoProxy-Creator来管理, 就像在Spring的事务管理一样使用。

第3类是AspecctJ joinPoint。AspectJ在领域对象保护方面特别有用, 这些领域对象绝大部分经常是在Spring容器之外被管理。通过使用AspectJ, 一个标准的构造函数, 例如:new Person;能够在正常使用的同时全面的被Acegi系统保护起来。

2 Acegi工作原理和工作流程

2.1 Acegi的工作原理

Acegi安全系统由7个关键的功能组件组成: (l) Authentication; (2) Context Holder; (3) Authentication Manager; (4) Access Decission Manager; (5) RunAsManager; (6) Secure Object; (7) Object Definition Source

Acegi安全系统需要记录应用于每个认证请求的安全配置参数。为了保存不同的认证请求的安全配置, 需要使用配置参数。从实现的视角来看, 配置参数使用Config Attribute接口来表示Acegi安全系统提供了Config Attribute接口的一个实现Security Config, 它把配置参数保存为一个字符串。

Config Attribute Definition类是Config Attribute对象的一个简单的容器, 它保存了和特定请求相关的ConfigAttribute的集合。

当安全拦截器收到一个安全认证请求时, 需要决定应用哪一个配置参数。换句话说, 它需要找出应用于这个请求的Config Attribute Definition对象。这个查找的过程是由Object Definition Source接口来处理的。这个接口的主要方法是public Config Attribute Definitionget Attributes (Object object) , 其中, Object参数是一个安全管理对象。因为安全管理对象包含有认证请求的详细信息。所以Object Definition Source接口的实现类可以从中获得所需的详细信息, 以查找相关的Config Attribute Definiton对象, 最后交给Access Decission Manager, 通过投票表决的方式决定用户是否有权限访问该资源。

2.2 Acegi的工作流程

Acegi安全系统是如何实现认证和授权机制的步骤如下。

(1) 用户登录系统, Acegi从acegisecurity.ui子系统的安全拦截器 (如Basic Processing Filter) 中得到用户的登录信息 (包括Principal和Credential) 并放入Authentication对象, 并保存在ContextHolder对象中。 (2) 安全拦截器将Authentication对象交给Authentication Manager进行身份认证, 如果认证通过, 返回带有Principal授权信息的Authentication对象。此时ContextHolder对象的Authentication对象已拥有Principal的详细信息。 (3) 用户登录成功后, 继续进行业务操作。 (4) 安全拦截器收到客户端操作请求后, 将操作请求的数据包装成安全管理对象 (Filter Invocation或Method Invocation对象) 。 (5) 从配置文件 (Object Definition Source) 中读出相关的安全配置参数Config Attribute Definition。 (6) 安全拦截器取出Context Holder中的Authentication对象, 把它传递给Authentication Manager进行身份认证, 并用返回值更新Context Holder的Authentication对象。 (7) 将对象, Config Attribute-Definition对象和安全管理对象 (secure Object) 交给Access Decision Manager, 检查Principal的操作授权。 (8) 如果授权检查通过则执行客户端请求的操作, 否则拒绝。

限于篇幅, 不写具体例子和配置文件了。只要理解了Acegi工作原理和工作流程, 就能在程序中灵活运用了。读者可参考http://acegisecurity.org的contacts sample例子, 来写自己的数据库和配置文件。

3 结语

Acegi还是一个全新的框架, 目前才为1.0版本, 国内运用还不普遍, 正因为它的新, 各种功能才更完善, 特别是可以保护到领域对象级。并且对一个完整的系统来讲, 使用这个安全框架不需要改变原有系统的任何代码, 只需要通过配置文件引入即可。真正实现了将安全代码从业务代码中分离。业务代码更干净, 系统结构更合理是每个开发人员的梦想。使用基于Spring的Acegi就可让我们实现这个梦想。

摘要:Acegi是一个基于Spring的安全架构, 所有的安全逻辑通过Spring的标准配置文件的定义就可实现, 系统的业务逻辑和安全逻辑完全分离, 采用Acegi安全框架不仅节省工作量, 提高编码效率, 同时提高代码质量。

关键词:Spring,Acegi,认证,授权,ACL (访问控制列表)

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:计算机数据库的备份与恢复技术研究 下一篇:计算机大数据在互联网学习中的应用与研究