`
chinajavawolf
  • 浏览: 114966 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

Acegi(01): Acegi安全系统介绍

阅读更多
1Acegi安全系统介绍
Acegi始于2003年晚期,当时在Spring Developers邮件列表中有人提问是否有人考虑提供一个基于Spring的安全实现。当时,Srping的社区是相对比较小的(尤其是和今天相比!),实际上Spring本身也是2003年早期才作为一个SourceForge项目出现的。对此问题的回应是它确实是一个值得研究的领域,虽然限于时间无法进行深入。
    有鉴于此,这个简单的安全实现虽然构建了但是并没有发布。几周以后,Spring社区的其他成员询问了安全框架,代码就被提供给了他们。随后又有人请求,到了2004年一月,大约有20人左右在使用这些代码。另外一些人加入到这些先行的用户中来,并建议建立一个SourceForge项目,这个项目在2004年3月建立起来。
    在早期,该项目自身并不具备任何认证模块。认证过程依赖容器管理安全(Container Managed Security)而Acegi注重授权。在一开始这样是合适的,但是随着越来越多的用户要求额外的容器支持,基于容器的认证的限制就显示出来了。另外一个相关的问题是添加新的JAR文件到容器的classpath,通常会让最终用户感到困惑并且配置错误。
    随后,Acegi加入了认证服务。大约一年后,Acegi成为了一个Spring Framework官方子项目。在2年半多的在多个软件项目中的活跃使用以及数以百计的改进和社区贡献,1.0.0最终版在2006年5月发布。
   今天,Acegi Security成为一个强大而活跃的社区。在支持论坛上有数以千计的帖子。14个开发人员专职开发,一个活跃的社区也定期共享补丁并支持他们的同侪。
现在的Acegi是一个能够为基于Spring的应用系统提供描述性安全保护的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring对依赖注入和面向切面编成的支持。
    当保护Web应用系统时,Acegi使用Servlet过滤器来拦截Servlet请求,以实施身份认证并强制安全性。并且,Acegi采取了一种独特的机制来声明Servlet过滤器,使你可以使用Spring IoC注入它所依赖的其他对象。(该方法建议查看源码,会有些启发)
   Acegi也能够通过保护方法调用在更底层的级别上强制安全性。使用Spring AOP,Acegi代理对象,将“切面”应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。
    无论你正在保护一个Web应用还是需要方法调用级别的安全性,Acegi都是使用如下的4个主要组件来实施安全性:
安全拦截器、认证管理器、访问决策管理器、运行身份管理器。
1.1安全拦截器
       在Acegi中,我们可以把安全拦截器想象成一扇上着两把锁的大门(这两把锁有着严格的规定,必须先开第一把锁,然后才能开第二把锁),它阻止对应用系统中受保护资源的访问。为了要访问受保护的资源,你首先必须向这扇上着锁的大门提供钥匙(对于系统来说,通常就是用户名和密码)来开第一把锁,然后才是第二把锁。
1.2认证管理器
       认证管理器就是那第一把锁,当你向那扇上着锁的大门提供了钥匙后,即你向系统提供了用户名和密码后,认证管理器就要负责认证你的钥匙是否有效,即你的用户名和密码是否正确。如果钥匙有效,用户名密码正确,那么认证管理器就要给你一个可以代表你身份的标识,即确定你是谁,那么你打开了第一把锁,然后你要去开第二把锁才能访问被保护的资源。
1.3访问决策管理器
    访问决策管理器就是那第二把锁,你要向第二把锁提供钥匙,来开启它。对于认证管理器来说,这第二把钥匙就是你的授权,如果你被授予了访问该受保护资源的权限,那么访问决策管理器就会帮你打开第二把锁。这样安全拦截器的那扇大门就会为你打开,让你访问受保护的资源。
1.4运行身份管理器
当你打开了认真管理器和访问决策管理器这两把锁,并打开了安全拦截器这扇大门之前,安全拦截器也许还有一件事情要做。
即时你已经通过身份认证并且已经获得了访问被保护资源的授权,门后也许还有更多的安全限制在等着你。比如,你也许已被授权访问查看某个Web页面,但用于创建该页面的对象与许和页面本身有不同的安全需求。一个运行身份管理器可以用另一个身份替换你的身份,从而允许你访问应用系统内部更深处的受保护对象。
运行身份管理器的用处在大多数应用系统中是有限的。幸运的是,当你使用Acegi保护应用系统时可以不必使用甚至不必完全理解运行身份管理器。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics