![](/img/trans.png)
[英]Accessing Spring Security Threadlocal user information from outside of 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.