`

acegi 我该从哪里取到用户的信息

阅读更多
项目需要 用acegi做为安全屏障,按acegi 1.0.1 官方自带的sample 拼了一个security-config.xml
但是 我不知道 登录后 当点击连接发送 xxx.do的请求后 我在Controller中如何得到用户的信息.例如ID,我该如何得到?
org.acegisecurity.userdetails.User中给的信息太少了
难不成 为了得到一个用户的ID我要由username再检索一遍数据库?
或者像众多兄弟一样除了接口几乎统统重写一遍?
希望是我文档没看够 大家指教~
另外saltSource我给了username提示找不到 User.username()方法 怪异
配置如下

<bean id="filterChainProxy"
		class="org.acegisecurity.util.FilterChainProxy">
		<property name="filterInvocationDefinitionSource">
			<value>
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
			</value>
		</property>
	</bean>
	<!--  -->
	<bean id="httpSessionContextIntegrationFilter"
		class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />

	<bean id="logoutFilter"
		class="org.acegisecurity.ui.logout.LogoutFilter">
		<!-- URL redirected to after logout -->
		<constructor-arg value="/index.jsp" />
		<constructor-arg>
			<list>
				<ref bean="rememberMeServices" />
				<ref bean="securityContextLogoutHandler" />
			</list>
		</constructor-arg>
	</bean>

	<bean id="securityContextLogoutHandler"
		class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />

	<bean id="authenticationProcessingFilter"
		class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
		<property name="authenticationManager"
			ref="authenticationManager" />
		<property name="authenticationFailureUrl"
			value="/acegilogin.jsp?login_error=1" />
		<property name="defaultTargetUrl" value="/" />
		<property name="filterProcessesUrl"
			value="/j_acegi_security_check" />
		<property name="rememberMeServices" ref="rememberMeServices" />
	</bean>

	<bean id="securityContextHolderAwareRequestFilter"
		class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter" />

	<bean id="rememberMeProcessingFilter"
		class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
		<property name="authenticationManager"
			ref="authenticationManager" />
		<property name="rememberMeServices" ref="rememberMeServices" />
	</bean>

	<bean id="anonymousProcessingFilter"
		class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
		<property name="key" value="changeThis" />
		<property name="userAttribute"
			value="anonymousUser,ROLE_ANONYMOUS" />
	</bean>

	<bean id="exceptionTranslationFilter"
		class="org.acegisecurity.ui.ExceptionTranslationFilter">
		<property name="authenticationEntryPoint">
			<ref bean="authenticationEntryPoint" />
		</property>
		<property name="accessDeniedHandler">
			<ref bean="accessDeniedHandler" />
		</property>
	</bean>

	<bean id="authenticationEntryPoint"
		class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
		<property name="loginFormUrl" value="/acegilogin.jsp" />
		<property name="forceHttps" value="false" />
	</bean>

	<bean id="accessDeniedHandler"
		class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
		<property name="errorPage" value="/accessDenied.jsp" />
	</bean>

	<bean id="filterInvocationInterceptor"
		class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
		<property name="authenticationManager"
			ref="authenticationManager" />
		<property name="accessDecisionManager">
			<ref bean="accessDecisionManager" />
		</property>
		<property name="objectDefinitionSource">
			<value>
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				/secure/extreme/**=ROLE_SUPERVISOR
				/secure/**=IS_AUTHENTICATED_REMEMBERED
				/**=IS_AUTHENTICATED_ANONYMOUSLY
			</value>
		</property>
	</bean>

	<bean id="accessDecisionManager"
		class="org.acegisecurity.vote.AffirmativeBased">
		<property name="allowIfAllAbstainDecisions" value="false" />
		<property name="decisionVoters">
			<list>
				<ref bean="roleVoter" />
				<ref bean="authenticatedVoter" />
			</list>
		</property>
	</bean>

	<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" />
	<bean id="authenticatedVoter"
		class="org.acegisecurity.vote.AuthenticatedVoter" />

	<bean id="rememberMeServices"
		class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
		<property name="userDetailsService" ref="userDetailsService" />
		<property name="key" value="changeThis" />
	</bean>

	<!-- 
		验证管理
	-->
	<bean id="authenticationManager"
		class="org.acegisecurity.providers.ProviderManager">
		<property name="providers">
			<list>
				<ref bean="daoAuthenticationProvider" />
				<ref bean="anonymousAuthenticationProvider" />
				<ref bean="rememberMeAuthenticationProvider" />
			</list>
		</property>
	</bean>

	<bean id="anonymousAuthenticationProvider"
		class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
		<!-- 未明确 -->
		<property name="key" value="changeThis" />
	</bean>
	<bean id="rememberMeAuthenticationProvider"
		class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
		<!-- 未明确 -->
		<property name="key" value="changeThis" />
	</bean>

	<!-- 
		dao层验证 暂时由数据库数据校验完成
		可对数据库密码字段进行解密
		可替换为在数据库层提取数据后 解析密码 然后核对
	-->
	<bean id="daoAuthenticationProvider"
		class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
		<property name="userDetailsService" ref="userDetailsService" />
		<property name="userCache">
			<ref bean="userCache" />
		</property>
		<!--property name="saltSource">
			<ref bean="saltSource" />
			</property>
			<property name="passwordEncoder">
			<ref bean="passwordEncoder" />
			</property-->
	</bean>

	<bean id="saltSource"
		class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource">
		<property name="userPropertyToUse">
			<value>username</value>
		</property>
	</bean>

	<bean id="passwordEncoder"
		class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />

	<!-- 
		以下3项为用户信息缓存设置
		减少数据库操作
	-->
	<bean id="userCache"
		class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
		<property name="cache">
			<ref bean="cache" />
		</property>
	</bean>

	<bean id="cache"
		class="org.springframework.cache.ehcache.EhCacheFactoryBean">
		<property name="cacheManager">
			<ref bean="cacheManager" />
		</property>
		<property name="cacheName" value="userCache" />
	</bean>

	<bean id="cacheManager"
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation">
			<value>/WEB-INF/ehcache.xml</value>
		</property>
	</bean>

	<!-- 
		可以替换为任何 UserDetailsService 接口的实现类 
		如 org.acegisecurity.userdetails.memory.InMemoryDaoImpl
	-->

	<bean id="userDetailsService"
		class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>

	<!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
	<bean id="loggerListener"
		class="org.acegisecurity.event.authentication.LoggerListener" />
</beans>

分享到:
评论
5 楼 lendo.du 2007-09-05  
1.你的用户信息Bean实现UserDetails接口。
2.你的角色对象Role实现GrantedAuthority接口。

这样你的SecurityContextHolder.getContext().getAuthentication().getPrincipal()方法返回的UserDetails对象就可以就可以转型为你自定义的用户信息Bean。  
4 楼 hendryxu 2006-11-24  
支持一下
3 楼 snowolf 2006-09-22  
这个还是自己解决了
晕 每次都是一样

 
Authentication auth = SecurityContextHolder.getContext()
                                                   .getAuthentication();

通过auth就可以得到用户的基本信息
2 楼 snowolf 2006-09-21  
关键是 
用户登录后 在什么地方保存了用户的信息
在controller中如何取到用户的信息
1 楼 IvanLi 2006-09-21  
是否可以考虑自己声明一个UserInfo类,实现org.acegisecurity.userdetails.UserDetails这个接口即可?

相关推荐

    acegi

    - "db"可能指的是数据库相关的配置或日志,Acegi通常需要配置用户数据库来存储用户信息和权限数据。 - "aopacegi"可能是一个包含Acegi与AOP相关配置或实现的文件,可能涉及切面的定义和安全策略的配置。 Acegi ...

    使用acegi控制用户权限实例

    `DaoAuthenticationProvider`将从数据源获取用户信息,而`RoleVoter`将根据用户的角色进行授权判断。 在`acegi-lib2`这个压缩包中,可能包含了Acegi的库文件和其他相关资源,比如示例代码或配置文件。为了进一步...

    Acegi框架介绍 acegi安全与认证

    对于领域对象的访问,Acegi会在执行Bean方法前检查访问控制列表(ACL),确保用户有权操作该对象。 5. **体系结构** Acegi的核心组件包括AuthenticationManager负责身份认证,AccessDecisionManager负责访问控制...

    Acegi-spring安全框架

    Acegi可以从登录表单、Cookie等来源获取用户信息,自动生成Authentication实例。Authentication的getPrincipal()方法返回一个代表用户的对象,通常可以转化为UserDetails类型。 Acegi框架的这种设计使安全控制变得...

    ACEGI

    此外,Acegi Security提供的特性如“记住我”功能和“Run-as”机制,进一步增强了用户体验和系统的安全性。 使用Acegi Security,开发者可以构建出符合企业级需求的安全系统,同时避免了因更换服务器环境而需要大量...

    spring acegi 详细文档

    Acegi还提供了丰富的接口和类,允许开发者自定义认证和授权流程,例如创建自定义的`UserDetailsService`来从数据源加载用户信息,或者实现自定义的`AuthenticationProvider`以支持特定的认证逻辑。 尽管Spring ...

    Spring Acegi权限控制

    用户表存储用户基本信息,角色表存储角色信息,而用户角色关联表用于建立用户和角色的多对多关系。在Acegi中,我们可以基于这些数据来实现RBAC,例如定义`ROLE_USER`和`ROLE_ADMIN`角色,并分配给不同的用户。 此外...

    基于java的ACEGI

    AceGI,全称为Acegi Security,是Java领域中一个用于Spring框架的安全组件,它提供了全面的身份验证、授权和会话管理功能。这个框架在早期的Spring版本中非常流行,为开发者构建安全的Web应用程序提供了强大的支持。...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务...使其能够从数据库中读取配置信息。

    acegi实现用户权限

    AceGI提供了多种内置的AuthenticationProvider,如DaoAuthenticationProvider,它可以从数据库中验证用户信息。 授权方面,AceGI支持角色和权限的概念。角色是预定义的一组权限集合,用户可以被分配一个或多个角色...

    Acegi例子代码+一个很好的学习Acegi的网址

    2. **学习网址**:提供了一个适合初学者的基础教程,从零开始学习Acegi的用法和配置。这个网站可能包含了详细的教程、示例代码和常见问题解答,帮助你快速上手Acegi。 如果你在学习过程中遇到任何问题,可以通过...

    acegi的使用

    它会根据用户的认证信息和资源的安全属性来授权,只有当用户具有相应的权限,访问决策管理器才会允许用户访问。 11.1.4 运行时身份管理器 在用户通过认证和授权之后,运行时身份管理器可能会执行一些额外的操作,...

    acegi使用说明acegi原理及如何与spring、hibernate结合

    Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...

    Acegi使用.pdf

    ### Acegi安全框架详解 #### 引言 Acegi安全框架是专为Spring框架设计的安全解决方案,它通过深度集成Spring的特性,提供了一套全面、灵活的安全管理方案。不同于传统的安全框架,Acegi采用了面向切面编程(AOP)...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应

    这通常涉及到数据库操作,从数据库中获取用户及其角色信息。同时,我们还需要设置用户认证的细节,如密码编码策略。 在 Acegi Security 中,角色和权限是通过`GrantedAuthority`接口表示的。每个用户可以拥有多个...

    acegi安全策略与CAS整合

    文档的目的是确保用户能够成功地将AceGI安全框架集成到他们的应用程序中,利用CAS服务器进行单点登录(SSO)和身份验证,以提高系统的安全性。 0.2 文档范围: 此文档涵盖了从安装CAS服务器,配置AceGI安全策略,到...

    acegi 完整实例

    1. **匿名登录**:Acegi允许用户在不提供详细认证信息的情况下访问特定资源。这通常用于提供公共信息或服务,如网站的首页。通过配置Acegi,可以定义哪些URL允许匿名访问,哪些需要身份验证。 2. **Session管理**:...

Global site tag (gtag.js) - Google Analytics