我正在使用Spring 3.0和Spring Security 3。我能够使用Spring Security针对数据库验证用户。使用:
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
我可以检索当前登录用户的用户名。我希望添加其他详细信息(如用户ID和对存储在Spring Security上下文中的主体对象的模块访问权限),以便以后可以检索它。如何向主体对象添加其他详细信息,以及以后如何在jsp或java类中检索它。如果可能,请提供适当的代码段。
编辑:我正在使用JDBC访问我的数据库。
先谢谢你。
4条答案
按热度按时间mmvthczy1#
以下是您需要的内容:
1.扩展Spring
User
(org.springframework.security.core.userdetails.User
)类和您需要的任何属性。1.扩展spring
UserDetailsService
(org.springframework.security.core.userdetails.UserDetailsService
)并填充上面的对象。重写loadUserByUsername
并返回扩展的用户类1.在
AuthenticationManagerBuilder
中设置自定义UserDetailsService
比如说
自定义用户详细信息可以是:
配置Spring安全上下文
都搞定了!
您可以调用
(CurrentUser)getAuthentication().getPrincipal()
来获取新的CurrentUser
或设置一些属性。ttcibm8c2#
为了向已验证的用户添加更多的细节。您需要首先创建您自己的User对象的实现,该实现应该扩展spring安全User对象。之后,您可以添加您想要添加到已验证的用户的属性。完成后,您需要返回
UserDetailService
中的用户对象的实现(如果您未使用LDAP进行验证)。此链接提供有关向已验证用户添加更多详细资料的详细资料--http://javahotpot.blogspot.com/2013/12/spring-security-adding-more-information.html
sqxo8psd3#
(我假设您有一个基本的Spring Security配置,并且知道基本组件是如何协同工作的)
最“正确”的方法是提供您自己的
AuthenticationProvider
实现,它返回一个自定义的Authentication
实现。然后,您可以在这个Authentication
示例中填充您需要的所有内容。例如:然后,在
applicationContext.xml
中:我想您可以通过提供
AuthenticationDetails
和AuthenticationDetailsSource
的自定义实现来使其工作,但我认为这是一种不太清晰的方法。cnwbcb6i4#
您需要做的“唯一”事情是创建您自己的UserDetailsService实现,该实现返回您自己的UserDetails对象实现。
有关实现基于JPA的
UserDetailsService
的教程,请参见here。