为啥 sec:authentication="name" 显示所有用户信息?

Posted

技术标签:

【中文标题】为啥 sec:authentication="name" 显示所有用户信息?【英文标题】:Why sec:authentication="name" show all user information?为什么 sec:authentication="name" 显示所有用户信息? 【发布时间】:2020-11-13 17:50:39 【问题描述】:

我使用 Spring Boot、Spring Boot Security、thymeleaf-extras-springsecurity5。我想获取有关当前用户的信息并写:

<div sec:authorize="isAuthenticated()"> 
 Authenticated as <span sec:authentication="name"></span></div>

并像这样获取所有用户信息:

验证为用户(id=7,firstName=TOGRUL,lastName=Mamedov, 父名=dddddd,电子邮件=master555@gmail.com,电话=+99477777777, 密码=$2a$11$txs/zdaLq.6eeBHz3uyM0e/R6uzJHs2.UIeIeRrV906y6Ia/hMOE6, 启用=true,秘密=MVNSUPKHWTAVLIEQ,国家=阿塞拜疆,州=巴基, 城市=巴达姆达尔,性别=男人,地址线=GANJA,邮政编码=2001, 出生日=01-07-2020,passportSeria=AZE,passportNumber=1234567, finCode=1234567,头像=/resources/images/user-icon.png,mytext=null, active=0, isUsing2FA=false, roles=[Role [name=ROLE_USER][id=5]])

对于基本身份验证,我使用这个项目。 https://github.com/Baeldung/spring-security-registration

如果是错误,如何修复此错误?我认为无论如何都不应该显示密码。 如何获取用户名? 如果可能,如何获取其他信息?它看起来像 Array 或 some.property

【问题讨论】:

【参考方案1】:

我看到你正在使用百里香叶。试试这个表达式,而不是“getSomeProperty()”调用你的用户类的任何 get 方法

$#authentication.getPrincipal().getSomeProperty()

【讨论】:

此代码正在运行 th:text="$#authentication.getPrincipal().getFirstName()" .【参考方案2】:

Thymeleaf Extras for Spring Security page on github 更连贯地解释了sec:authentication 标签属性应该传达的内容 - 简而言之,例如&lt;div sec:authentication="name"&gt;&lt;/div&gt; 应该和&lt;div th:text="$#authentication.name"&gt;&lt;/div&gt; 含义相同,即它们都会显示在Authentication 对象上调用getName() 的结果,可以在使用Spring Security 时自动传递给控制器​​方法/Spring MVC 框架,并在那里进行了检查。

可能,OP 正在使用自定义UserDetailsService,构造他自己的User 对象,在标准User(..) 构造函数中对用户名使用某种toString() 方法 - 从而导致上述奇怪的显示。从UserDetailsService 返回的User 对象似乎也由Authentication 对象的getPrincipal() 方法返回。

无论如何,在另一个答案中使用$#authentication 对象属性是一种更细粒度的方法来获取登录用户的各种信息,而不仅仅是名称(可能相当模糊,正如这个问题所证明的那样)

【讨论】:

以上是关于为啥 sec:authentication="name" 显示所有用户信息?的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf: sec:authentication 出现在 ANY case 而 sec:authorize 在 NO ANY case

sec:authentication 在 Spring Boot Security 中不起作用

如何使用 Thymeleaf 配置 Spring Boot 并使用 sec:authentication 标签

Thymeleaf 不解释 sec 标签

来自不同 url 时的不同登录

Thymeleaf sec:身份验证标签不显示角色