Spring控制器为任何请求添加属性

时间:2018-05-01 20:29:59

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

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

3 个答案:

答案 0 :(得分:1)

由于您在问题中添加了spring-security标记,因此如果您想在任何页面上显示已登录用户,最好选择使用spring-security

首先,在jsp页面中添加以下声明:

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

然后在您的jsp页面中,我们可以使用<sec:authentication property="name"/>在任何页面显示登录用户。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以添加 Servlet过滤器,如下所示,将userName添加到响应标题

@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() );
        }
}

在您的用户界面中使用来自响应的userName。