Spring登录用户信息检索

时间:2013-09-12 12:24:57

标签: java spring jsp spring-mvc spring-security

我正在创建一个Basic Spring Web应用程序,该应用程序涉及用户登录并进入其个人仪表板。当通过控制器实例化“登录”URL时,我使用了Default Spring Security Login表单。我想知道的是,如何检索刚刚从数据库登录的用户个人帐户信息? 这是我在登录URL实例化时在控制器类中所拥有的

@RequestMapping("dashboard")
public String goDashboard(Model model){
    model.addAttribute("user", new User());
    return "dashboard"; // this is just returning the viewResolver JSP page
}

我假设上面的内容不正确,因为我个人认为制作一个新的Object是错误的并且会给我null值。当我登录并尝试使用时显示:<c:out value="${user.username}" />没有显示任何内容。

3 个答案:

答案 0 :(得分:1)

或者你可以在控制器中获取它:

@RequestMapping("dashboard")
public String goDashboard(Model model, Principal principal){
    model.addAttribute("username", principal.getName());
    return "dashboard"; 
}

这种方法可以帮助您将业务逻辑保留在控制器中(关注点分离)。

编辑。传递用户详细信息对象:

@RequestMapping("dashboard")
public String goDashboard(Model model, Principal principal){
    UserDetails userDetails = (UserDetails)((Authentication)principal).getPrincipal()
    model.addAttribute("userDetails", userDetails);
    return "dashboard"; 
}

答案 1 :(得分:0)

如果你创建新的User对象,用户名肯定是null(如果你只有空的默认构造函数)。 你可以在jsp中获得这样的用户名:

<sec:authentication property="principal.username" /> 

并且不要忘记在顶部添加声明:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

详细了解here

答案 2 :(得分:0)

你可以通过各种方式获得它。

1)使用SecurityContextHolder

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

然后像现在一样将它放入模型中。

2)使用Spring Security Taglibs

<sec:authentication property="principal.username" /> // will render name

在这种情况下,您无需向控制器添加任何代码。