2.4. 安全对象<o:p></o:p>
如果你熟悉AOP,你会知道有很多种advice可用:before, after, throws 和 around。around advice非常有用,因为它能够选择是否选择是否执行一个方法调用,是否修改返回值,以及是否抛出异常。Acegi Security对方法调用和web请求都提供around advice。我们使用AOP联盟实现对方法调用的around advice,对于web请求的around advice则是使用标准的过滤器(Filter)。<o:p></o:p>
<o:p> </o:p>
对于那些不熟悉AOP的人来说,关键是要理解Acegi Security能够帮助你保护方法调用以及web请求。大多数人对保护他们服务层的方法调用感兴趣。这是因为在当前的J2EE应用中,服务层包含了大多数的业务逻辑(声明,作者不赞成这种设计,反而支持正确封装的领域模型以及DTO,assembly, facade 以及 transparent persistence patterns,而不是当前主流的贫血模型,我们将在这里讨论)。如果你需要保护service层的方法调用,使用标准的Spring AOP平台(或者被成为AOP 联盟(AOP Alliance))就足够了。如果你需要直接对领域模型进行保护,那么可以考虑使用AspectJ。<o:p></o:p>
<o:p> </o:p>
你可以选择对使用AspectJ 或者AOP联盟(AOP Alliance)对方法进行授权,或者你可以选择使用过滤器(filter)来对web请求进行授权。你将0个,1个,2个或者3个这些方法一起使用。主流的用法是执行一些web请求授权,以及在服务层使用AOP联盟(AOP Alliance)对一些方法调用授权。<o:p></o:p>
<o:p> </o:p>
Acegi Security使用“安全对象”(secure object)这个词来指任何能够将安全应用于其上的对象。每个Acegi Security支持的安全对象都有自己的类,它是AbstractSecurityInterceptor的子类。重要的一点是,如果一个principal通过认证,当AbstractSecurityInterceptor执行的时候,SecurityContextHolder中要包含一个有效的Authentication。<o:p></o:p>
<o:p> </o:p>
AbstractSecurityInterceptor提供一个固定的工作流程来处理安全对象请求。这个工作流程包括查找和当前请求相关联的“配置属性(configuration attributes)”。配置属性(configuration attributes)可以被认为是对被AbstractSecurityInterceptor使用的类有特殊含义的字符串。他们通常针对AbstractSecurityInterceptor使用XML进行配置。反正,AbstractSecurityInterceptor会询问AccessDecisionManager “这是配置属性(configuration attributes),这是当前的认证对象(Authentication object),这是当前请求的详细信息-那么这个特定的principal可以执行这个特定的操作吗?”。<o:p></o:p>
<o:p> </o:p>
假如AccessDecisionManager判定允许这个请求,那么AbstractSecurityInterceptor一般来说就继续执行请求。虽然这样,用户在少数情况之下可能需要替换SecurityContext中的Authentication,可以通过AccessDecisionManager调用一个RunAsManager来实现。在某些不常见的情形下这将非常有用,例如服务层的方法需要用另一种标识(身份)来调用远程系统。这可能有所帮助,因为Acegi Security自动在不同的服务器之间传播安全标识(假设你正确配置了RMI或者HttpInvoker remoting protocol client)。<o:p></o:p>
<o:p> </o:p>
随着安全对象处理和返回-意味着方法调用完毕或者过滤器链(filter chain)处理完毕-AbstractSecurityInterceptor有最后的机会来处理调用。这时,AbstractSecurityInterceptor可能会修改返回的对象。我们可能要这样做,因为授权判断不能在安全对象调用途中执行。由于高度的可插拔性,如果需要AfterInvocationManager将控制权交给AfterInvocationManager来实际修改对象。这个类甚至可以彻底替换对象,或者抛出异常,或者根本不修改它。<o:p></o:p>
<o:p> </o:p>
因为是AbstractSecurityInterceptor中心模版类,看起来第一副插图该献给它。(译注:原手册里的图画的太丑陋了,我用jude重新画了一遍)<o:p></o:p>
<!----><!----><!----><o:p></o:p>
<o:p></o:p>
图1 关键“安全对象”模型<o:p></o:p>
<o:p> </o:p>
只有那些希望实现全新的对请求进行截取截取和授权方式的开发者才需要直接使用安全对象。例如,可能构建一个新的安全对象安全调用一个消息系统。任何需要安全并且能够提供一种截取调用的方式(例如AOP around advice semantics)的东西都可以成为安全对象。虽然如此,大部分的Spring应用都会只是透明应用当前支持的三种安全对象类型(AOP Alliance MethodInvocation, AspectJ JoinPoint 和 web request FilterInterceptor)。<o:p></o:p>
<o:p> </o:p>
2.5. 结论<o:p></o:p>
恭喜!你已经获取了Acegi Security足够的概括性的图景来开始着手你的项目。我们探究了共享组件,认证过程,以及对“安全对象”的通用授权概念。手册中的余下部分你可能用到也可能用不到,可以按照任意顺序阅读。<o:p></o:p>
<o:p> </o:p>
分享到:
- 2006-12-24 10:08
- 浏览 6172
- 评论(4)
- 论坛回复 / 浏览 (4 / 8466)
- 查看更多
相关推荐
acegi-security-1.0.4.jar
首先,`acegi-security-1.0.4.jar` 是Acegi Security框架的核心库文件,包含了所有必要的类和资源,用于在应用中实现安全功能。这个JAR文件通常会被添加到Java项目的类路径(classpath)中,以便在代码中引用和使用...
Acegi最新版v1.0.4,网络安全方面教程
官方版本,亲测可用
Acegi Security为基于J2EE的企业应用软件提供全面的安全解决方案。正如你在本手册中看到的那样,我们尝试为您提供有用的,高可配置的安全系统。 Acegi Security专注于在企业应用安全层为您提供帮助,你将会发现和...
Acegi(version1.0.4)中文参考手册.doc
在分析`acegi-security-1.0.4.jar`的源码之前,我们需要了解Acegi Security的基本概念和架构。 Acegi Security的核心目标是提供一个灵活、可扩展的安全框架,允许开发者对用户认证、授权进行细粒度控制。它基于...
这个"acegi-security-tiger-1.0.0-RC2.jar.zip"压缩包包含的是Acegi Security的一个早期版本——1.0.0 Release Candidate 2(RC2),专门针对Tiger(Java SE 5.0)版本的Java开发环境。 Acegi Security的主要功能...
Acegi (version1.0.4)中文参考手册.Acegi Security为基于J2EE的企业应用软件提供全面的安全解决方案。正如你在本手册中看到的那样,我们尝试为您提供有用的,高可配置的安全系统。
在"Acegi最新版(v1.0.4)中文参考手册"中,你将找到关于这个框架的详尽信息。这份文档可能涵盖了以下关键知识点: 1. **框架概述**:介绍Acegi的基本概念,包括其设计目标、工作原理以及如何与Spring框架集成。 2. ...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
`acegi-security-tiger-1.0.4.jar` 是该框架的主库文件,包含了所有必要的类和方法,供开发者在项目中引用。这个版本可能针对的是Java 5或6,并且兼容Spring 2.x版本。 `acegi-security--license.txt` 文件通常包含...
包含acegi-security-1.0.7.jar,acegi-security-1.0.7-sources.jar,acegi-security-cas-1.0.7.jar,acegi-security-cas-1.0.7-sources.jar,acegi-security-catalina-1.0.7.jar,acegi-security-catalina-1.0.7-...
在这个" Acegi-security-samples-tutorial-1.0.7.zip "压缩包中,包含了一个详细的教程实例,帮助开发者理解并掌握Acegi Security的使用方法。通过将这些示例代码导入到自己的项目并添加注释,我们可以更深入地学习...
acegi 参考手册 acegi参考手册 acegi参考手册