首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季安全用户信息

春季安全用户信息
EN

Stack Overflow用户
提问于 2014-09-03 02:45:32
回答 2查看 120关注 0票数 0

关于Security和获取当前登录的User的更多信息(实例变量),我有一个简短的问题。默认情况下,不需要编写您自己的UserDetailsService,是否有一种方法可以获得在我的User bean中定义的其他实例变量?您可能知道,通过在我的控制器中放置以下代码,我可以访问以下字段,如:用户名、密码、启用、授权等。

代码语言:javascript
复制
UserDetails userDetails = 
               (UserDetails) ((Authentication)principal).getPrincipal();

我希望获得其他信息,例如我在用户对象中定义的以下实例变量(ID、姓名、电子邮件等):

代码语言:javascript
复制
 // 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

请你提供一些进一步的帮助,我可以得到更多的信息吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-03 05:04:38

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

代码语言:javascript
复制
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-03 02:57:31

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

假设您的用户对象就像

代码语言:javascript
复制
public class MyUser implements UserDetails{
     private int id;
     private String name;
     private String email;
     private String username;

}

成功登录后,您将将MyUser的一个实例作为主体存储在其中。

然后

代码语言:javascript
复制
     MyUser userDetails = 
           (MyUser) ((Authentication)principal).getPrincipal();
     String name = userDetails.getName();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25635434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档