我是Spring MVC和Spring Security的新手。我使用Spring安全性和MVC执行了登录和注册功能。我无法找到任何会话管理方式。
我想访问所有页面上的一些用户详细信息,例如(电子邮件,姓名,ID,角色等)。 我想将这些保存到会话对象,以便我可以在任何页面上获取这些。
我在春天的会话中得到以下方式
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
auth.getPrincipal();
但是从我返回的对象中我只能得到用户名和密码的详细信息。
但我需要访问该用户的更多详细信息。
请帮我解决这个问题。 提前谢谢。
我想让我的模型类对象从SecurityContextHolder.getContext()返回.getAuthentication()。getDetails();为此我需要配置。
此致 Pranav
答案 0 :(得分:7)
您需要让模型类实现UserDetails接口
class MyUserModel implements UserDetails {
//All fields and setter/getters
//All interface methods implementation
}
然后在你的弹簧控制器中你可以这样做:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
Object myUser = (auth != null) ? auth.getPrincipal() : null;
if (myUser instanceof MyUserModel) {
MyUserModel user = (MyUserModel) myUser;
//get details from model object
}
答案 1 :(得分:3)
您可以使用它来获取UserDetails
(或任何包含您的自定义详细信息的实现)。
UserDetails userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails();
如果没有,您可以从UserDetailsService
加载用户详细信息。
在这两种情况下,我认为你必须自己将它们保存在会话范围bean中。