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



我使用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()}
github上的Thymelaf Extras for Spring Security页面更连贯地解释了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}对象属性是一种更细粒度的方法,可以为登录用户获取各种信息,而不仅仅是名称(正如这个问题所证明的那样,这可能相当模糊(

相关内容

  • 没有找到相关文章

最新更新