春天安全。在每个页面上显示用户名

时间:2010-09-03 17:56:14

标签: spring security jsp model-view-controller spring-security

我希望在登录后存储用户信息,并在每个页面上显示我的登录名和用户名(使用jsp)。如何在我的jsp视图中访问会话bean,该会话bean将存储登录用户的信息?

3 个答案:

答案 0 :(得分:10)

使用authentication tag

  

此标记允许访问当前   验证对象存储在   安全背景。它呈现了一个   对象的属性直接在   JSP。所以,例如,如果是校长   身份验证的属性是   Spring Security的实例   UserDetails对象,然后使用   <秒:认证   property =“principal.username”/>将   呈现当前用户的名称。

     

当然,没有必要使用   用于此类事物的JSP标记   有些人喜欢保持尽可能少   视图中的逻辑尽可能。您可以   访问身份验证对象   你的MVC控制器(通过调用   SecurityContextHolder.getContext()。getAuthentication())   并将数据直接添加到您的   视图渲染的模型。

答案 1 :(得分:3)

我假设你正在使用spring security。成功登录后,将UserDetails对象放入会话中(如果登录成功,通常是转发的控制器)

Object principal = SecurityContextHolder.getContext()
     .getAuthentication().getPrincipal();
HttpSession session = request.getSession(true); //create a new session

// put the UserDetails object here.
session.setAttribute("userDetails", principal);

在JSP中,您可以访问UserDetails对象,如下所示:

<span class="message">Welcome ${userDetails.username}</span>

答案 2 :(得分:1)

这与When using Spring Security, what is the proper way to obtain current username (i.e. SecurityContext) information in a bean?几乎相同。 Spring赞同的方法是

final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();

但链接的讨论有其他选择。