简介:Acegi安全框架- -

          Spring没有提供J2EE安全性相关的抽象,而是单独地使用Acegi安全框架来实现应用地安全。事实上安全主要是两个部分,认证和授权。认证就是看看用户是不是它宣称的人,授权就是决定已认证的用户(以角色区分)是否有权对资源访问和操作。Acegi能对Web资源和POJO进行保护,主要的组件有安全性拦截器(AbstractSecurityInterceptor)、认证管理器(AuthenticationManager)、访问决定管理器(AccessDecisionManager)和Run-As管理器(RunAsManager)。
    Acegi的认证服务主要使用两个接口,Authentication和AuthenticationManager。Authentication提供认证信息,它会被传入AuthenticationManager的authenticate方法进行认证。Acegi为AuthenticationManager提供了实现ProviderManager,里面可以指定若干Provider。比如JaasAuthenticationProvider可以从JAAS配置中获取信息进行认证;PasswordDaoAuthenticationProvider可以之间在底层持久源(如Active Directory,LDAP)进行认证;DaoAuthenticationProvider借助内存,RDBMS或XML等存储源获得用户名密码进行认证;CasAuthenticationProvider借助于Yale的CAS进行认证;AuthByAdapterProvider使用容器适配器进行认证,比如JBoss的LoginModule;RunAsImplAuthencationProvider供被替换身份的用户使用;RemoteAuthenticationProvider对远程客户进行认证,如Hessian和Burlap;TestingAuthenticationProvider仅仅供单元测试使用。为了取得用户信息,Acegi提供AuthenticationDAO接口,并提供了InMemoryDaoImpl和JdbcDaoImpl实现。对这两个实现进行配置的时候可以同时配置使用密码加密(如MD5,SHA)和用户信息的缓存时间。
    Web资源的授权方面,关键组件是AccessDecisionManager接口,Acegi提供的几个实现很有意思。ConsensusBased表示不考虑弃权票时并且同意票大于反对票时授权;UnamimousBased表示不考虑弃权票且其他都是同意票时授权;AffirmativeBased表示不考虑反对票只要有同意票就授权。当然也可以自定义这些策略。具体投票人使用AccessDecisionVoter接口,现成的实现有RoleVoter。RoleVoter只对角色名是rolePrefix指定的值的角色进行投票,这里便产生了弃权票。
    真正进行认证和授权还需要借助于Servlet过滤器。Acegi提供了六种过滤器:ChannalProcessingFilter根据Web资源要求决定使用HTTP或HTTPS(通过重定向),必须在其他过滤器前;AuthenticationProcessFilter用于处理基本表单认证;CasProcessingFilter用于处理CAS认证;BasicProcessingFilter用于HTTP BASIC认证;AutoIntegrationFilter能获取存储的用户信息(通常存在session里面);SecurityEnforcementFilter对授权作出最后决定,通过它能同FilterSecurityInterceptor进行交互。
    为了不使过滤器和Spring耦合,可以使用FilterToBeanProxy。在web.xml中配置过滤器的时候只要配置filter-calss为FilterToBeanProxy,在通过init-param,把param-name为targetClass的param-value设置成相应的过滤器即可。然后在Spring配置文件中也要配置相应的过滤器并设定各自的一些属性值。
   
最后Acegi对POJO方法级授权使用拦截器MethodSecurityInterceptor,在Spring配置文件中配置好某些方法的的角色名即可。
    啊,伸一下懒腰!对Spring初步了解的小结终于告一段落。总体感觉现代软件开发越来越可以看作一种艺术了,尤其是那些配置文件(归功于XML)。配置构成感觉很像画家对一幅画的构图,又像作曲家把乐符放置在五线谱上的过程。配置成功后编码变得相当简单。然而就像作出一幅好的画作,编出一个好的乐章需要经过多次的尝试甚至是挫折,要想完全掌握Spring还有很长的路要走,况且这种技术变得很快,大家加油!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值