【发布时间】:2018-10-11 21:34:11
【问题描述】:
我需要在任何页面上显示登录的用户名。是否可以只使用 1 种方法,在任何请求上都会调用并将 name 属性添加到模型中?
【问题讨论】:
标签: spring spring-mvc authentication spring-security model
我需要在任何页面上显示登录的用户名。是否可以只使用 1 种方法,在任何请求上都会调用并将 name 属性添加到模型中?
【问题讨论】:
标签: spring spring-mvc authentication spring-security model
由于您在问题中添加了spring-security 标签,所以如果您想在任何页面显示登录用户,最好的选择是使用spring-security。
首先,在你的jsp页面中添加如下声明:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
然后在你的jsp页面中我们可以使用<sec:authentication property="name"/>在任意页面显示登录用户。
【讨论】:
thymeleaf-extras-springsecurity3 吗?很奇怪,<span sec:authentication="name"></span>应该可以,不知道为什么不行
是和不是。 要么将用户名存储在 Session (setRequestAtrributes) 中,要么创建一个通过 auth-token/authentication 读取用户名的过滤器链。取决于您决定哪个用户登录的位置。
【讨论】:
您可以添加一个 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 中使用响应中的用户名。
【讨论】: