Acegi的基本概念和原理

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(决策管理器)三大组件组成,它们各司其职,配合完成整个安全模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值