【问题标题】:Spring controller add attribute to any requestSpring控制器向任何请求添加属性
【发布时间】:2018-10-11 21:34:11
【问题描述】:

我需要在任何页面上显示登录的用户名。是否可以只使用 1 种方法,在任何请求上都会调用并将 name 属性添加到模型中?

【问题讨论】:

    标签: spring spring-mvc authentication spring-security model


    【解决方案1】:

    由于您在问题中添加了spring-security 标签,所以如果您想在任何页面显示登录用户,最好的选择是使用spring-security

    首先,在你的jsp页面中添加如下声明:

    <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> 
    

    然后在你的jsp页面中我们可以使用&lt;sec:authentication property="name"/&gt;在任意页面显示登录用户。

    【讨论】:

    • 我用 Thymeleaf 做的,但 html 元素保持为空。如果我需要添加其他信息,例如上次在线或其他信息,那么 UserDetails 类没有?
    • 否,但您需要检查 spring 安全标签是否可以在 Thymeleaf 上工作
    • 此代码:“登录用户:”来自官方文档thymeleaf.org/doc/articles/springsecurity.html 不起作用,我只有“登录用户:”文本, 没有用户名
    • 还是不行,你的第一个代码是jsp的,第二个(带的)是Thymeleaf的
    • @VadymBorys 你添加了相关的 jars thymeleaf-extras-springsecurity3 吗?很奇怪,&lt;span sec:authentication="name"&gt;&lt;/span&gt;应该可以,不知道为什么不行
    【解决方案2】:

    是和不是。 要么将用户名存储在 Session (setRequestAtrributes) 中,要么创建一个通过 auth-token/authentication 读取用户名的过滤器链。取决于您决定哪个用户登录的位置。

    【讨论】:

      【解决方案3】:

      您可以添加一个 Servlet 过滤器,如下所示,将 userName 添加到 response Header

      @Component
      public class MyFilter implements Filter {
      
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      
              HttpServletRequest httpServletRequest = (HttpServletRequest) request;
              HttpServletResponse httpServletResponse = (HttpServletResponse) response;
              HttpSession session = httpServletRequest.getSession();
      
              if(session !=null&& session.getAttribute("username")!=null){
                  httpServletResponse.addHeader("username",httpServletRequest.getSession().getAttribute("username").toString() );
              }
      }
      

      并在您的 UI 中使用响应中的用户名。

      【讨论】:

        猜你喜欢
        • 2016-04-01
        • 2019-04-30
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 2020-04-08
        • 2021-06-19
        • 1970-01-01
        相关资源
        最近更新 更多