繁体   English   中英

Spring Security用户信息

[英]Spring Security User Information

我对Spring Security和获取有关当前登录User更多信息(实例变量)有一个快速问题。 默认情况下,无需编写自己的UserDetailsService是否可以获取在User Bean中定义的其他任何实例变量? 如您所知,将以下代码放在我的一个控制器中,我可以访问以下字段,例如:用户名,密码,已启用,授权等。

UserDetails userDetails = 
               (UserDetails) ((Authentication)principal).getPrincipal();

我想获取其他信息,例如我在User对象(ID,NAME,EMAIL,ETC)中定义的以下实例变量:

 // Instance Variables
 private int id;
 private String name;
 private String email;
 private String username; // I can already obtain this
 private String password; // I can already obtain this

您能否以我可以获得更多信息的方式提供进一步的帮助?

您的用户对象必须实现UserDetails接口。 当您获得对它的引用时,将其正确强制转换,以便您可以访问getter方法。

假设您的用户对象就像

public class MyUser implements UserDetails{
     private int id;
     private String name;
     private String email;
     private String username;

}

成功登录后,您将MyUser的实例存储为主体。

然后

     MyUser userDetails = 
           (MyUser) ((Authentication)principal).getPrincipal();
     String name = userDetails.getName();

如您所知,您可以使用以下代码获取UserDetails对象。

UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

使用UserDetails对象,您可以获得用户名,密码和权限。 现在,您需要该用户的ID和电子邮件。 在这种情况下,一旦您的用户通过身份验证,便可以进行数据库查询,该查询将按用户名返回用户对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM