`

菜鸟-手把手教你把Acegi应用到实际项目中(12)-Run-As认证服务

阅读更多

      有这样一些场合,系统用户必须以其他角色身份去操作某些资源。例如,用户A要访问资源B,而用户A拥有的角色为AUTH_USER,资源B访问的角色必须为AUTH_RUN_AS_DATE,那么此时就必须使用户A拥有角色AUTH_RUN_AS_DATE才能访问资源B。尽管这种场合相对较少,但存在即合理,总会有需要的时候,要学会未雨绸缪。
      为了实现这一需求,Acegi为我们提供了Run-As认证服务。下面我们举例说明如何应用Run-As认证服务。

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方法进行授权
      设置访问showDate方法必须拥有AUTH_RUN_AS_DATE角色,同时暴露IRunAsDate接口。

<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
      RunAsManagerImpl实例会基于现有的的已认证对象创建新的RunAsUserToken认证类型,而RunAsImplAuthenticationProvider要负责这一认证类型的认证工作。与其他认证提供者一样,必须将其加入authenticationManager中。

<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
      RunAsManagerImpl中的key必须与RunAsImplAuthenticationProvider中的key一致,从而保证RunAsManagerImpl 与RunAsImplAuthenticationProvider协同工作。在前面章节中,对于匿名认证与Remember-Me认证中也需要提供类似的key属性值。
      RunAsManagerImpl的rolePrefix属性默认值为ROLE_。由于我们配置的资源需要的角色为AUTH_RUN_AS_DATE,故在此我们将前缀设置为AUTH_。

<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的角色。
 注意,Run-As认证服务只是临时性替换了现有用户的身份,这一点要比较重视。

 

5、数据库脚本
 本例采用了MySQL数据库,脚本在WebRoot/db目录下。

 

6、其他说明
开发环境:
MyEclipse 5.0GA
Eclipse3.2.1
JDK1.5.0_10
tomcat5.5.23
acegi-security-1.0.7
Spring2.0


Jar包:
acegi-security-1.0.7.jar
commons-codec.jar
jstl.jar(1.1)
spring.jar(2.0.8)
standard.jar
commons-logging.jar(1.0)
c3p0-0.9.0.jar
log4j-1.2.13.jar
mysql-connector-java-3.1.10-bin.jar

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
6 楼 sunjiesh 2009-06-08  
终于看完了,非常不错的教程。相比较其它Acegi教程,这套教程非常完善。
5 楼 zhanjia 2009-02-22  
呵, 事物总有个发展的过程, 相信Acegi会越来越好的
4 楼 peachtao 2009-02-17  
学习东西要一步一步来!
3 楼 peachtao 2009-02-17  
至今还不回acegi,工作痛苦啊
2 楼 pdw2009 2009-02-04  
Acegi1就是配置太麻烦了
1 楼 ybbid 2009-01-30  
谢谢.配套有示例,真是好教程.

相关推荐

    菜鸟-手把手教你把Acegi应用到实际项目中(3)

    在“菜鸟-手把手教你把Acegi应用到实际项目中(3)”这篇博文中,博主可能会深入讲解如何将 Acegi 集成到实际的项目中,为读者提供一个逐步的指南。下面,我们将探讨 Acegi 的核心概念、配置以及在项目中的应用。 1. ...

    菜鸟-手把手教你把Acegi应用到实际项目中(1.2)

    本教程将引导初学者逐步了解如何在实际项目中应用Acegi安全框架,以便为你的Web应用提供强大的身份验证和授权功能。 首先,让我们理解Acegi的基础概念。Acegi的核心组件包括SecurityContext、Authentication和...

    菜鸟-手把手教你把Acegi应用到实际项目中

    在本文中,我们将深入理解如何将Acegi应用到实际项目中,特别关注其核心配置——web.xml中的过滤器设置和Acegi安全文件的配置。 首先,我们来看web.xml中的过滤器配置: 1. **FilterToBeanProxy**:Acegi通过...

    acegi-security-tiger-1.0.0-RC2.jar.zip

    在使用这个压缩包时,首先需要将其解压,然后将`acegi-security-tiger-1.0.0-RC2.jar`添加到项目的类路径中。如果项目是基于Spring的,需要在配置文件中启用Acegi Security,并根据应用需求配置相应的安全策略。同时...

    acegisecurity内所有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-sample.rar_acegi

    这个"acegi-sample.rar_acegi"项目提供了一个详细的示例,帮助开发者理解并应用Acegi框架的核心功能。下面我们将深入探讨Acegi的主要特性及其在实际开发中的应用。 1. **认证与授权**: Acegi框架的核心是它对用户...

    Acegi学习笔记--Acegi详解实战Acegi实例

    通过学习Acegi,我们可以了解到Web应用安全的基本思路和实践方法,这对于理解现代的Spring Security框架非常有帮助。虽然Acegi已经不再更新,但它的理念和架构仍对现代安全框架设计产生深远影响。

    acegi-security 1.0.2

    acegi-security 1.0.2.jar

    acegi-security-cas-1.0.7.jar

    Acegi是一个专门为SpringFramework提供安全机制的项目,全称为Acegi Security System for Spring.

    acegi-sample.rar_acegi-1.0.7_acegi-sample.part2_spring-1.2.4.jar

    这个压缩包中的"acegi-sample"部分可能包含了一个示例项目,展示了如何在实际应用中配置和使用Acegi Security。而"spring-1.2.4.jar"则是Spring框架的一个较旧版本,表明Acegi Security是在Spring 1.x时代设计的,那...

    Acegi开发项目教程.pdf

    在本教程中,作者旨在帮助那些在学习Acegi过程中遇到困难的开发者,通过一步步的指导,使他们能够成功地将Acegi集成到实际项目中,并理解其核心配置和工作原理。 首先,Acegi的配置是其难点之一,因为涉及许多不同...

    学习Acegi-认证 文档

    为了搭建Acegi认证服务,需要将以下依赖的jar文件添加到项目的`WEB-INF/lib`目录下: - `acegi-security-1.0.3.jar` - `spring2.0.jar` - `commons-codec-1.3.jar` 此外,还需要对项目的`web.xml`文件进行配置,以...

    acegi basic认证具体demo

    通过这个实践,你可以理解到Acegi如何处理认证过程,以及如何配置和自定义其行为以适应你的应用需求。如果你想要进一步了解或优化安全设置,可以参考提供的博客链接,那里可能有更详细的信息和示例。

    acegi-security-0.8.3

    acegi-security-0.8.3驱动程序

    ldap与Acegi? ----Acegi配置文件解剖

    这篇博客将深入解析一个配置了Acegi Security的`applicationContext-acegi-security.xml`文件,帮助我们理解如何将LDAP与Acegi集成以实现更安全的Web应用。 **LDAP基础** LDAP是一种标准的网络协议,用于存储和...

    acegisecurity-1.0.7

    Acegi Security是Spring框架的一个扩展,专为Java企业级应用提供安全认证和授权服务。它在Spring框架的基础上构建了一套完整的安全解决方案,使开发者能够方便地集成到自己的应用中,确保用户访问权限的有效控制和...

    spring的acegi应用

    标题“spring的acegi应用”指的是在Spring框架中使用Acegi安全模块进行权限管理和用户认证的一个主题。Acegi是Spring早期的一个安全组件,后来发展成为Spring Security,是Spring生态系统中的重要部分,用于提供全面...

    CAS 单点登录安装笔记3 -- 与acegi集成

    - 首先,我们需要在 Acegi 安全配置文件(例如 `acegi-context-cas.xml`)中引入 CAS 客户端的相关依赖。这通常包括添加 CAS 的过滤器,如 `CasAuthenticationFilter` 和 `CasValidationFilter`,以及 `...

Global site tag (gtag.js) - Google Analytics