如何在jsp中显示当前用户?
Posted
技术标签:
【中文标题】如何在jsp中显示当前用户?【英文标题】:How to show the current user in a jsp? 【发布时间】:2015-10-19 10:26:51 【问题描述】:我是 spring Mvc 的新手,我刚刚使用 spring security 完成了用户身份验证,我希望登录的用户显示在主页中(类似 "userX is connected" 的消息)并有一个日志记录登录的所有用户。 你能帮助我吗 ? 有任何想法吗 ?
【问题讨论】:
如果你不想把它从 Controller 放到 Modal 中。您可以使用 Spring Security Taglib。检查这个答案:***.com/a/9049127/4180458. 【参考方案1】:请求属性
推荐的做法是在请求中添加一个带有用户名值的请求属性。优点是这使您与 Spring Security 分离。如果您决定删除 Spring Security,您的视图不会受到影响。在 Spring MVC 中,您可以使用以下内容填充请求属性:
@RequestMapping("/home")
public String home(Principal principal, Model model)
if(principal != null)
model.addAttribute("username", principal.getName());
在标准的 Servlet 环境中(即不使用 Spring MVC)你可以简单地使用
if(principal != null)
httpServletRequest.setAttribute("username", principal.getName());
然后在您的 JSP 中,您可以使用以下方式显示它:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:out value="$username"/>
注意:使用标签库输出用户名以避免XSS问题非常重要。不要在未将 $username 放置在 taglib 中或确保正确转义值的情况下使用它。
大多数时候,用户希望能够将用户名添加到每个页面。您可以使用 @ModelAttribute
& @ControllerAdvice
在 Spring MVC 3.2+ 中轻松完成此操作。例如:
@ControllerAdvice
public class UserControllerAdvice
@ModelAttribute("username")
public String username(Principal principal)
return principal == null ? null : principal.getName();
从 HttpServletRequest 访问
Spring Security 在标准 HttpServletRequest.getUserPrincipal()
(这实际上是我们的 Spring MVC 示例中解析 Principal 的方式)和 HttpServletRequest.getRemoteUser()
方法中将用户公开为 Principal。这意味着您还可以在 HttpServletRequest 中访问 JSP 中的用户。这意味着您还可以使用:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:out value="$pageContext.request.remoteUser"/>
Spring 安全标签库
另一种方法是使用Spring Security JSP tag lib(如前所述)。例如
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<sec:authentication property="name"/>
记录身份验证尝试
您可以通过实现 ApplicationListener 并将其公开为 bean 来记录身份验证尝试。 Spring Security 提供了一个开箱即用的名为 LoggerListener 的实现。要使用它,请在您的配置中添加如下内容:
<b:bean class="org.springframework.security.authentication.event.LoggerListener"/>
您也可以提供自己的实现。以下是它的外观轮廓:
public class MyListener implements ApplicationListener<AbstractAuthenticationEvent>
public void onApplicationEvent(AbstractAuthenticationEvent event)
// do something
【讨论】:
非常感谢@Rob!用户名显示得很好..最后一件事我没有找到教程或想法..这是如何记录所有刚刚通过身份验证的用户? 请查看更新文件以上是关于如何在jsp中显示当前用户?的主要内容,如果未能解决你的问题,请参考以下文章