当Spring Security对用户进行身份验证时,如何在会话中管理自定义用户对象?

Nac*_*ket 20 java spring-security

Spring Security对用户进行身份验证时,它会创建一个UserDetail对象,并且可以在web-app中查找当前的UserId.但是,假设我想保留一个自定义用户对象,其中包含首选项和其他详细信息以及UserDetails或替换UserDetails.

那么,当Spring Security成功验证时,如何将自定义用户对象添加到会话?以及如何在Spring Security注销登录用户时从会话中删除自定义用户对象.

或者有任何适当的方法来做到这一点?

Gen*_*diy 18

执行此操作的最佳方法是让您的某个服务(可能是UserService)实现UserDetailsS​​ervice,并在spring安全性XML中指定您希望使用自己的用户详细信息服务.

UserDetailsS​​ervice需要做的是实现loadByUsername(String username)方法.此方法需要返回实现UserDetails的类.这可以是您自己的自定义对象存储您喜欢的任何内容.这样做的好处是,您可以通过spring security taglib从JSP访问对象的属性,并且它也始终可以从Spring Security Security中的SecurityContextHolder单例(线程安全)中获得.

以下是文档的链接:spring security manual,第8章 这是一篇关于为密码加密实现自定义用户详细信息服务的博客文章:示例用法

希望这可以帮助

编辑:忘记提及在注销时将从安全上下文和会话中删除该对象.这是最有用的,它完全由春季安全管理.