[英]spring security. display user name on every page
我希望在登录后存储用户信息,并在每个页面上显示我的登录名和用户名(使用jsp)。 如何在我的jsp视图中访问会话bean,该会话bean将存储登录用户的信息?
使用身份验证标记
此标记允许访问存储在安全上下文中的当前Authentication对象。 它直接在JSP中呈现对象的属性。 因此,例如,如果Authentication的principal属性是Spring Security的UserDetails对象的实例,那么使用<sec:authentication property =“principal.username”/>将呈现当前用户的名称。
当然,没有必要为这种事情使用JSP标记,有些人更喜欢在视图中保持尽可能少的逻辑。 您可以访问MVC控制器中的Authentication对象(通过调用SecurityContextHolder.getContext()。getAuthentication())并将数据直接添加到模型中以供视图呈现。
我假设你正在使用弹簧安全。 成功登录后,将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>
这与使用Spring Security时几乎相同, 在bean中获取当前用户名(即SecurityContext)信息的正确方法是什么? 。 Spring赞同的方法是
final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
但相关的讨论有其他选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.