为啥 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
标签属性应该传达的内容 - 简而言之,例如<div sec:authentication="name"></div>
应该和<div th:text="$#authentication.name"></div>
含义相同,即它们都会显示在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 中不起作用