Spring Security用户信息

时间:2014-09-03 02:45:32

标签: java spring spring-mvc spring-security

我有一个关于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

请您提供一些进一步的帮助以获取更多信息?

2 个答案:

答案 0 :(得分:1)

您的用户对象必须实现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();

答案 1 :(得分:1)

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

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

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