8

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

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

我在春季获得以下会议方式

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
auth.getPrincipal();

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

但我需要访问该用户的更多详细信息。

  • 有没有办法通过将它保存到会话并在 jsp 页面上获取来做到这一点?
  • 还是在春天有任何 OOTB 方式来完成这项工作?

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

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

问候, 普拉纳夫

4

2 回答 2

8

你需要让你的模型类实现UserDetails接口

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

    //All interface methods implementation
}

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

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        
}
于 2014-07-17T09:59:50.043 回答
3

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

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

如果没有可用的,您可以从UserDetailsService.

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

于 2013-07-24T06:58:13.373 回答