我希望在登录后存储用户信息,并在每个页面上显示我的登录名和用户名(使用jsp)。如何在我的jsp视图中访问会话bean,该会话bean将存储登录用户的信息?
答案 0 :(得分:10)
此标记允许访问当前 验证对象存储在 安全背景。它呈现了一个 对象的属性直接在 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();
但链接的讨论有其他选择。