权限系统在一个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 (访问控制列表)
相关文章:
计算机数据库的备份与恢复技术研究01-12
配电网用户供电可靠性计算与改进措施的研究01-12
税务系统数据质量管理的研究与实践01-12
MIS系统设计论文提纲01-12
数控系统发展分析分析论文提纲01-12
计算机大数据在互联网学习中的应用与研究01-12
云计算环境下网路安全系统的设计与应用01-12
电力自动化系统大数据的应用研究01-12
云计算环境下网络安全系统的设计与应用01-12
云计算在大数据中心建设的研究与应用01-12