从Spring Security中获取用户详细信息

时间:2013-07-24 06:46:41

标签: spring session spring-mvc spring-security

我是Spring MVC和Spring Security的新手。我使用Spring安全性和MVC执行了登录和注册功能。我无法找到任何会话管理方式。

我想访问所有页面上的一些用户详细信息,例如(电子邮件,姓名,ID,角色等)。 我想将这些保存到会话对象,以便我可以在任何页面上获取这些。

我在春天的会话中得到以下方式

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

但是从我返回的对象中我只能得到用户名和密码的详细信息。

但我需要访问该用户的更多详细信息。

  • 有没有办法将它保存到session并获取jsp页面?
  • 或者春天是否有任何OOTB方式来完成这项工作?

请帮我解决这个问题。 提前谢谢。

我想让我的模型类对象从SecurityContextHolder.getContext()返回.getAuthentication()。getDetails();为此我需要配置。

此致 Pranav

2 个答案:

答案 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中。