繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM