RBAC:Role Based Access Control 基于角色的安全控制,Acegi正是基于角色实现权限控制的。角色是一种抽象的逻辑用户分组,代表具有同等权限的用户组,资源和角色相关联,每个用户根据自己具有的角色获得相应的权限,这样就大大简化了授权的逻辑。
Acegi是一个基于Spring开发的安全框架,提供了非常有用的外置式的安全架构。它对web页面的安全保护是通过Filter(过滤器)来实现的,而对业务逻辑组件的方法级别的保护则是通过AOP实现的。
Acegi中有Principal(主体)和Credentials(证书)的概念,它们可以是任意对象,并且由Authentication对象封装,代表一个用户认证,其中Principal通常是用户名,Credentials通常是口令,不过在Acegi中通常将UserDetails作为Principal,除了存储用户名之外,UserDetails还包含了用户角色等权限信息。
org.acegisecurity.Authentication extends java.security.Principal Principal表示主体的抽象概念,它可以用来表示任何实体,例如个人或者公司等等。而Authentication扩展自Principal,表示一次验证请求,一个Authentication在被AuthenticationManager(认证管理器)处理之前被认为是没用通过验证的。
org.acegisecurity.AuthenticationManager 认证管理器,它的任务是对用户进行认证,其手段是通过识别Principal和Credentials来确定用户的身份,一般使用它的实现类ProviderManager处理验证请求。ProviderManager并不直接验证用户提供的Principal和Credentials,而是将他们委托给一个或者多个AuthenticationProvider来验证,只要有一个AuthenticationProvider成功认证了用户,认证过程就结束。
org.acegisecurity.GrantedAuthority 被赋予Authentication的已被认可的权限,GrantedAuthority必须或者能够把自己描述成字符串,或者能够被AccessDecisionManager(决策管理器)明确支持。
身份认证是Acegi安全保护机制的第一步,在用户通过了身份认证后,Acegi必须决定是否允许用户访问某一受保护的资源,这是由org.acegisecurity.AccessDecisionManager(决策管理器)完成的。它的职责是决定是否允许用户访问某一受保护的资源,其decide方法不抛出异常即认为允许访问。
决策管理器的决策过程相当有趣,它基于投票的方式,让一个或者多个具有投票权的AccessDecisionVoter对象进行投票,然后依据投票的结果判断是否允许访问该资源,具体策略依赖于实现,见AffirmativeBased、ConsensusBased、UnanimouseBased。
配置FilterChain,正确配置AuthenticationManager与AccessDecisionManager后,还需要配置一个过滤器链,让每一个过滤器各司其职,完成认证和授权,这也是最为复杂的一步。
常用过滤器简介:
1、ChannelProcessingFilter,确保当前URL以指定的协议进行访问,例如:必须对以secure开头的URL以HTTPS访问。
2、ConcurrentSessionFilter,阻止同一用户在某段时间内多次登录。
3、HttpSessionContextIntegrationFilter,由于用户的认证信息放在HttpSession中,这个过滤器的作用就是从Session中获得用户的认证信息,然后将其关联到当前请求中,如果没有这个过滤器,后续的请求处理就无法获得已认证的用户身份信息。任何需要访问SecurityContextHolder的Filter都必须放在HttpSessionContextIntegrationFilter之后,否则获取的Authentication对象将永远是null。
另外还有LogouFilter、AuthenticationProcessingFilter、SecurityContextHolderAwareRequestFilter、RememberMeProcessingFilter、AnonymousProcessingFilter、ExceptionTranslationFilter、FilterSecurityInterceptor等,它们的具体功能在此不一一详述,可参见Acegi的Javadoc或者相关资料。
注意:Filter的顺序非常重要,因为有的Filter依赖于其它的Filter,总的来说,Filter的顺序应该严格按照上述介绍的顺序排列,但是可以有选择性的使用。
需要特别指出的是最后一个Filter,即FilterSecurityInterceptor,因为真正保护Web资源的正是这个Filter,它通过将URL和相应的角色关联起来,再使用AccessDecisionManager就实现了资源的授权访问。
Acegi的配置看起来很复杂,实际上整个安全管理器框架主要由FilterChainProxy(过滤器链代理)、AuthenticationManager(认证管理器)、AccessDecisionManager(决策管理器)三大组件组成,它们各司其职,配合完成整个安全模块。
分享到:
相关推荐
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括...Acegi安全系统和其他的安全系统不同,它并没有角色和用户组的概念。
acegi,acegi,acegi
通过场景分析acegi的设计原理通过场景分析acegi的设计原理
对ACEGI的整个原理进行详细剖析!!!
不错的ACEGI 教程
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前... 安全涉及到两个不同的概念,认证和授权。前者是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。
Acegi文档 spring acegi 详细文档
acegi安全系统,是一个用于spring framework的安全框架,能够和目前流行的web容器无缝集成。它使用了spring的方式提供了安全和认证安全服务,包括...acegi安全系统和其他的安全系统不同,它并没有角色和用户组的概念。
Acegi原理,比较好的介绍材料
acegi实例,acegi详细配置和代码实现
acegi 框架 介绍 spring 安全
Acegi能做什么 Acegi的体系结构 Acegi核心组件 典型的web认证过程 Acegi的登陆认证 Acegi对安全对象的访问控制 Filter 组件 Acegi的不足之处
acegi-security 1.0.2.jar
包含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,spring的安全验证框架
关于Acegi的安全框架,里面有Acegi的实例,讲述得挺清楚的,
讲述acegi的使用方法,和对acegi的一些基本类讲解。
1、一个Acegi的例子,可以运行 2、一个很好的学Acegi的网址,0基础学习Acegi,强烈推荐 3、有什么问题可以发邮件heroshen@126.com讨论
NULL 博文链接:https://weigang-gao.iteye.com/blog/2234233