如何在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中显示当前用户?的主要内容,如果未能解决你的问题,请参考以下文章

jsp不用框架,如何实现用户登陆后显示用户信息,隐藏登陆框

如何在jsp中应用检查当前用户是不是登录

在jsp页面中如何获取到当前登录用户的角色id

在jsp中如何实现加一个动态下拉框选择年份,并在当前页面显示相应的月份值?

在JSP中如何获得当前日期(急)!!!

如何在JSP页面中实现对数据库的增删查改?