如何在每个页面上使用Spring MVC,Spring Security和FreeMarker显示用户名。

7 浏览
0 Comments

如何在每个页面上使用Spring MVC,Spring Security和FreeMarker显示用户名。

如何在每个页面的页眉中显示登录用户的用户名?我尝试使用以下方法:

1)使用Spring Security标签,例如:

首先,我创建一个名为security的变量,如下所示:

<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] />

然后,我尝试使用我研究过的authentication标签方法获取用户名,如下所示:

<@security.authentication property="principal.username">

但是我遇到了以下错误:

    FreeMarker模板错误:
org.springframework.beans.NotReadablePropertyException: Bean类[org.springframework.security.authentication.UsernamePasswordAuthenticationToken]的属性'principal.username'无法读取或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

2)我尝试在控制器中获取用户名并将其放入视图中,如下所示:

 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 String name = auth.getName(); //获取已登录的用户名
    map.addAttribute("username" , name);

这个方法有效,但是我有很多控制器,我不想更新所有的控制器并在所有的控制器中添加这些行。

这些是我的版本:

4.2.5.RELEASE
4.1.0.RELEASE
spring-security-taglibs
4.0.4.RELEASE
freemarker
2.3.21

欢迎任何解决方案,谢谢。

0
0 Comments

问题:如何在每个页面上使用Spring MVC、Spring Security和FreeMarker显示用户名?

解决方法:

以下方法适用于我:

${Session.SPRING_SECURITY_CONTEXT.authentication.name}

0
0 Comments

问题的出现原因是在使用Freemarker时,表达式无法解析为指定的Java调用。异常提示无法找到名为principal.username的属性。解决方法是使用name代替principal.username,获取当前Authentication对象的name属性。具体代码如下:

<.authentication property="name">

0