org.acegisecurity.userdetails.UserDetails
提供核心的用户信息
该接口的实现不会被Acegi Security直接用于安全用途。它们只是简单地存储用户信息。那些用户信息将被封装进Authentication对象。这就允许与用户相关的非安全信息如Email,被保存在方便的地方。
具体的实现必须特别留意每个详细方法的非空契约。进行扩展时可以参考org.acegisecurity.userdetails.User类。
具体的实现还必须是不变的,因为UserDetails将存储在缓存中以,同一个实例会被多个线程使用。
org.acegisecurity.intercept.AbstractSecurityInterceptor
AbstractSecurityInterceptor确保security interceptor得到正确的启动配置,它将同样实现的对安全对象的操作有:
从SecurityContextHolder对象中获得Authentication对象
依靠对ObjectDefinitionSource查询获得的安全对象访问来判断请求涉及的是一个受保护的对象或是一个公用的对象
---------------------------------------------------------------------------------------------------------------------------------------------
如果对象是受保护的,即对于安全对象有一个ConfigAttributeDefinition ,则进行如下流程:
1.如果Authentication.isAuthenticated()方法返回false,或者alwaysReauthenticate为true,则通过配置的AuthenticationManager对
请求进行认证。如果认证成功,将返回的Authentication对象放回SecurityContextHolder中。
2.通过配置的AccessDecisionManager对请求授权
3.通过RanAsManager处理所有的run-as替换
4.将控制传递给实际的子类继续执行。为了确保AbstractSecurityInterceptor被重新调用,当子类完成处理后个InterceptorStatusToken将被返回。
具体的子类将通过afterInvocation(InterceptorStatusToken, Object) 方法重新调用AbstractSecurityInterceptor。
5.如果RunAsManager替换了Authentication对象,则为该对象返回SecurityContextHolder。
6.如果一个AfterInvocationManager被定义,那么执行它,并允许其替换应返回给调用者的对象。
对于公共的对象,即对此安全对象没有对应的ConfigAttributeDefinition:
具体的子类在安全对象被执行后返回的InterceptorStatusToken随后将传回AbstractSecurityInterceptor,Abstract
SecurityInterceptor在afterInvocation(InterceptorStatusToken,Object)方法被调用后将不继续进行其它动作。
---------------------------------------------------------------------------------------------------------------------------------------------
之后控制重新返回给实际子类,子类将返回结果或异常给原始的调用者。
org.acegisecurity. ConfigAttribute
存储安全系统设计的配置参数
当一个AbstractSecurityInterceptor启动,一组为安全对象模式的配置参数被定义。
通过ConfigAttributeDefinition在运行时为同一各安全对象目标保存其它的ConfigAttribute。
org.acegisecurity.ConfigAttributeDefinition
持有与安全对象目标关联的一组ConfigAttribute对象。
所有与AbstractSecurityInterceptor关联的ConfigAttributeDefinition被保存在ObjectDefinitionSource中。
org.acegisecurity.vote.AbstractAccessDecisionManager
处理在bean context中定义的一系列AccessDecisionVoter,以及如果所有AccessDecisionVoter在投票中弃权时的访问控制行为。
默认为拒绝访问。
有三个实现类:
AffirmativeBased: 任意投票者投赞成票即放行
ConsensusBased: 所有投票者投赞成票才放行
UnanimousBased: 所有投票者全部投赞成票或弃权票才放行
org.acegisecurity.vote.AccessDecisionVoter
负责对授权进行投票