Thymeleaf 中的 Spring 安全表达式
Posted
技术标签:
【中文标题】Thymeleaf 中的 Spring 安全表达式【英文标题】:Spring Security Expressions in Thymeleaf 【发布时间】:2017-08-11 20:59:06 【问题描述】:使用 Spring Boot 1.5.2 和 Thymeleaf 2.1,我试图在 html 页面上添加一些代码来识别用户的角色。
但是,所有这些语句的计算结果都是正确的,这是不正确的:
<div sec:authorize="hasAuthority('ADMIN')" > Has Authority ADMIN </div>
<div sec:authorize="hasAuthority('USER')" > Has Authority USER </div>
<div sec:authorize="hasRole('ROLE_ADMIN')">Has Role ROLE_ADMIN</div>
<div sec:authorize="hasRole('ROLE_USER')">Has Role ROLE_USER</div>
<div sec:authorize="hasRole('ADMIN')">Has Role ADMIN</div>
<div sec:authorize="hasRole('USER')">Has Role USER</div>
User.java
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
Role.java
@Entity
@Table(name = "role")
public class Role
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "role")
private String role;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getRole()
return role;
public void setRole(String role)
this.role = role;
【问题讨论】:
【参考方案1】:我解决了这个问题。我错过了三个项目:
thymeleaf-extras-springsecurity4
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
html 模板中的 xmlns:sec
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
正确的输出
现在,当具有 ROLE=USER 的用户登录时,渲染模板时会显示“具有权限 USER”
<div sec:authorize="hasAuthority('USER')" > Has Authority USER </div>
【讨论】:
【参考方案2】:检查模板中的定义xmlns:sec
- html
。
【讨论】:
【参考方案3】:您是否在页面的 html 部分中定义了 sec。像这样:
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
【讨论】:
【参考方案4】:你需要在porm中导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
这是给你的网站 gui https://www.thymeleaf.org/doc/articles/springsecurity.html
【讨论】:
【参考方案5】:听起来很奇怪..
你确定你的项目中包含了 Thymeleaf 吗?
如果您的项目/文件中未包含 Thymeleaf,则 html 页面将呈现为常规 html 页面。因此,您可能看起来拥有所有角色,但实际上,该网站只是呈现为常规 html。
你可以用这个检查你的 Thymeleaf 是否正确渲染:
<p th:text="Hello World!" />
【讨论】:
以上是关于Thymeleaf 中的 Spring 安全表达式的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring 安全性在 Thymeleaf 中的静态资源的可见性
在 JavaScript 中的 Thymeleaf 中使用 Spring Security 转义表达式
没有 Thymeleaf 的 Spring Boot 安全性