精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-25
有这样一些场合,系统用户必须以其他角色身份去操作某些资源。例如,用户A要访问资源B,而用户A拥有的角色为AUTH_USER,资源B访问的角色必须为AUTH_RUN_AS_DATE,那么此时就必须使用户A拥有角色AUTH_RUN_AS_DATE才能访问资源B。尽管这种场合相对较少,但存在即合理,总会有需要的时候,要学会未雨绸缪。 1、用于配置Run-As认证服务的接口与实现类
public interface IRunAsDate { public void showDate(); } public class RunAsDate implements IRunAsDate { private static final Log log = LogFactory.getLog(RunAsDate.class); /* (non-Javadoc) * @see sample.service.IRunAsDate#showDate() */ public void showDate() { log.info("当前日期: " + new Date()); } }
2、对showDate方法进行授权 <bean id="runAsDateImpl" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>sample.service.IRunAsDate</value> </property> <property name="interceptorNames"> <list> <idref local="runAsDateSecurity" /> <idref local="runAsDateTarget" /> </list> </property> </bean> <bean id="runAsDateTarget" class="sample.service.impl.RunAsDate"></bean> <bean id="runAsDateSecurity" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> <property name="alwaysReauthenticate" value="true" /> <property name="authenticationManager" ref="authenticationManager" /> <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager" /> <property name="objectDefinitionSource"> <value> sample.service.IRunAsDate.showDate=AUTH_RUN_AS_DATE </value> </property> </bean>
其中,alwaysReauthenticate为true表示每次操作都需要进行身份的验证。在默认情况下,RunAsManagerImpl构建的RunAsUserToken认证对象都是已认证状态。因此,只有设置alwaysReauthenticate为true时,才会触发RunAsImplAuthenticationProvider的认证操作。
3、配置RunAsImplAuthenticationProvider <bean id="runAsImplAuthenticationProvider" class="org.acegisecurity.runas.RunAsImplAuthenticationProvider"> <property name="key" value="javaee" /> </bean> <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> …… <!-- 配置与daoAuthenticationProvider类似 --> <ref bean="runAsImplAuthenticationProvider" /> </list> </property> </bean>
4、配置RunAsManagerImpl <bean id="runAsManagerImpl" class="org.acegisecurity.runas.RunAsManagerImpl"> <property name="key" value="javaee" /> <property name="rolePrefix" value="AUTH_" /> </bean> <bean id="contactManagerSecurity" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> <property name="authenticationManager" ref="authenticationManager" /> <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager" /> <property name="runAsManager" ref="runAsManagerImpl" /> <property name="objectDefinitionSource"> <value> …… sample.service.IContactManager.getAll=AUTH_FUNC_ContactManager.getAll,RUN_AS_DATE …… </value> </property> </bean>
我们对getAll方法配置了RUN_AS_DATE角色,默认时RunAsManagerImpl会从授权信息中获得前缀为”RUN_AS”的角色,同时构建新的授权信息,将rolePrefix添加到角色中,即组成类似AUTH_RUN_AS_DATE的角色。
5、数据库脚本
6、其他说明
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-30
谢谢.配套有示例,真是好教程.
|
|
返回顶楼 | |
发表时间:2009-02-04
Acegi1就是配置太麻烦了
|
|
返回顶楼 | |
发表时间:2009-02-17
至今还不回acegi,工作痛苦啊
|
|
返回顶楼 | |
发表时间:2009-02-17
学习东西要一步一步来!
|
|
返回顶楼 | |
发表时间:2009-02-22
呵, 事物总有个发展的过程, 相信Acegi会越来越好的
|
|
返回顶楼 | |
发表时间:2009-06-08
终于看完了,非常不错的教程。相比较其它Acegi教程,这套教程非常完善。
|
|
返回顶楼 | |
浏览 3084 次