Thymeleaf 无法显示用户的用户名和角色

Posted

技术标签:

【中文标题】Thymeleaf 无法显示用户的用户名和角色【英文标题】:Thymeleaf can't display username and role of user 【发布时间】:2021-12-01 21:11:02 【问题描述】:

我无法在我的索引页面上显示经过身份验证的用户的角色和用户名。我用的是百里香叶。所有角色用户都保存在内存中。我正在使用 spring+mvc 编写和 web 应用程序

我在 pom.xml 中添加了依赖项

<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
<version>3.0.4.RELEASE</version>

这是我的索引页:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head>
    <title>Submission result</title>
<link rel="stylesheet"
     href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <h1>login ok: welcome </h1>

  <hr>
<p>
<div sec:authorize="hasRole('ROLE_USER')"> 
    User: <sec:authentication property="principal.username" />
    <br><br>
    Role(s): <sec:authentication property="principal.authorities" />
    </div>
</p>

我也你用:

<div sec:authorize="hasRole('_USER')"> or is.Authorized(), but I dont diplay nothin.

这是我的安全配置类:

 public void configure(AuthenticationManagerBuilder auth) throws Exception

    @SuppressWarnings("deprecation")
    UserBuilder user=User.withDefaultPasswordEncoder();
    auth.inMemoryAuthentication().withUser(user.username("user").password("user").roles("USER"))
    .withUser(user.username("try").password("try").roles("MANAGER", "USER"))
    .withUser(user.username("admin").password("admin").roles("USER", "MANAGER", "ADMIN"));
    
    

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests().anyRequest().authenticated()
    .and()
    .formLogin()
    .loginPage("/login/log").loginProcessingUrl("/login/control/").permitAll()
    .failureUrl("/client/add")//.permitAll()
    .and()
    .logout().permitAll();

我还阅读了有关 stackoverlofw 的许多问题,但我没有找到解决方案。我还阅读了官方 Thymeleaf 网站上的指南。

为什么我不能显示:“角色:用户”,“用户名:用户”?

在日志中我没有错误或警告,并且登录正常。

【问题讨论】:

【参考方案1】:

示例中的 HTML 无效 (&lt;sec:authentication property="principal.authorities" /&gt;)。

我相信您正在寻找的语法是:

User: <span sec:authentication="name"></span>
Role(s): <span sec:authentication="principal.authorities"></span>

这在带有 Spring Security documentation 的 Thymeleaf 中有所描述。

【讨论】:

【参考方案2】:

我找到了这段代码:th:inline="text">Welcome [[$#httpServletRequest.remoteUser]] 它适用于显示用户名,但我不知道这种注释。

【讨论】:

以上是关于Thymeleaf 无法显示用户的用户名和角色的主要内容,如果未能解决你的问题,请参考以下文章

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

Thymeleaf和Spring安全无法正常工作[重复]

不检查用户授权:每个循环 Thymeleaf

Thymeleaf 登录和注销可见性问题

基于角色 Springboot+Thymeleaf 禁用/启用 Html 元素

如何在 Spring Boot 中使用 Thymeleaf 保存角色?