我使用Spring Boot、Spring Boot Security、thymelaf-extras-springsecurity5。我想得到关于当前用户的信息并写:
<div sec:authorize="isAuthenticated()">
Authenticated as <span sec:authentication="name"></span></div>
并获取所有用户信息,如:
身份验证为用户(id=7,firstName=TOGRUL,lastName=Mamedov,patronymic=dddddd,电子邮件=master555@gmail.com,电话=+94977777777,密码=$2a$11$txs/zdaLq.6eeBHz3uyM0e/R6uzJHs2.UIeierV906y6Ia/MOE6,enabled=true,secret=MVNSUPKHWTAVLIEQ,country=阿塞拜疆,state=巴基,city=Badamdar,gender=Man,addressLine=GANJA,zipCode=2001,birthDay=01-07-2020,passportSeria=AZE,passportNumber=1234567,finCode=123467,avatar=/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
如果这个错误是一个bug,如何修复它?我认为无论如何都不应该显示密码。如何获取用户名?如果可能的话,如何获取其他信息?它看起来像Array或some.properties
我看到您正在使用thymelaf。试试这个表达式,而不是";getSomeProperty(("调用用户类的任何get方法
${#authentication.getPrincipal().getSomeProperty()}
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}
对象属性是一种更细粒度的方法,可以为登录用户获取各种信息,而不仅仅是名称(正如这个问题所证明的那样,这可能相当模糊(