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

Rao*_*nav 8 session spring spring-mvc spring-security

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

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

我在春季会议的方式如下

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
auth.getPrincipal();
Run Code Online (Sandbox Code Playgroud)

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

但我需要访问该用户的更多细节.

  • 有没有办法通过将它保存到会话和jsp页面上的get来做到这一点?
  • 或者春天是否有任何OOTB方式来完成这项工作?

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

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

此致,Pranav

Nik*_*eja 8

您需要使您的模型类实现UserDetails接口

class MyUserModel implements UserDetails {
    //All fields and setter/getters

    //All interface methods implementation
}
Run Code Online (Sandbox Code Playgroud)

然后在你的弹簧控制器中你可以这样做:

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        
}
Run Code Online (Sandbox Code Playgroud)


Lau*_*ntG 4

您可以使用它来获取UserDetails(或任何具有您的自定义详细信息的实现)。

UserDetails userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails();
Run Code Online (Sandbox Code Playgroud)

如果没有可用的,您可以从 加载用户详细信息UserDetailsService

在这两种情况下,我认为您必须自己将它们保存在会话范围 bean 中。