sec:authorize 不起作用 - Spring Boot 2、Thymeleaf 3、Thymeleaf Spring Security 5 集成包
Posted
技术标签:
【中文标题】sec:authorize 不起作用 - Spring Boot 2、Thymeleaf 3、Thymeleaf Spring Security 5 集成包【英文标题】:sec:authorize does not work - Spring Boot 2, Thymeleaf 3, Thymeleaf Spring Security 5 integration package 【发布时间】:2020-08-05 08:42:22 【问题描述】:我正在合作
Spring Boot 2.2.5 百里香 3.0.11 Thymeleaf Spring Security 5、3.0.4 发布我在 pom.xml 中使用以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
版本被识别并且相应的 jars 包含在我的项目中。我还在模板中添加了 Thymeleaf 安全模块的额外命名空间:
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
我已经使用 Hibernate 和 mysql 以及登录/注销实现了基于角色的身份验证和授权,据我了解,这很好。
Thymeleaf Security Dialect 的 sec:authentication
标签工作正常,并且还显示了正确的角色。在调用方法sec:authorize="isAuthenticated()"
时,sec:authorize
标记似乎也能正常工作。
但是,在使用sec:authorize="hasRole('...')"
或th:if="$#authorization.expression('hasRole(''...'')')"
评估模板中用户的角色时,我遇到了困难。我似乎无法评估角色尽管使用sec:authentication="principal.authorities"
正确显示了这些角色。
我在测试页面上总结了我的方法,显示以下结果:
任何线索我的错误或误解隐藏在哪里?非常感谢您提前的支持。
【问题讨论】:
【参考方案1】:经过更多研究,我发现了我的问题。将前缀 ROLE_
添加到角色名称(在数据源中)后,一切正常。
【讨论】:
你不知道我因此遭受了多少痛苦。谢谢,你让我免于扯头发。 很高兴它帮助了你@Samツ以上是关于sec:authorize 不起作用 - Spring Boot 2、Thymeleaf 3、Thymeleaf Spring Security 5 集成包的主要内容,如果未能解决你的问题,请参考以下文章
thymeleaf.extras.springsecurity4 sec:authorize 不起作用
Spring Boot Security - Thymeleaf sec:authorize-url 不起作用
将 Spring Boot 1.5 升级到 2 <sec:authorize> 不起作用
<sec:authorize ifAnyGranted 或 ifAnyGranted 在 SPRING SECURITY 中不起作用