2021-10-11 01:09:28 +08:00
|
|
|
|
# Thymeleaf 标签方言
|
|
|
|
|
|
|
|
|
|
本插件的作用是让我们可以在 Thymeleaf 页面中使用 Sa-Token 相关API,俗称 —— 标签方言。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 1、引入依赖
|
|
|
|
|
首先我们确保项目已经引入 Thymeleaf 依赖,然后在此基础上继续添加:
|
|
|
|
|
|
2022-10-20 13:06:36 +08:00
|
|
|
|
<!---------------------------- tabs:start ---------------------------->
|
|
|
|
|
<!-------- tab:Maven 方式 -------->
|
|
|
|
|
``` xml
|
2021-10-11 01:09:28 +08:00
|
|
|
|
<!-- 在 thymeleaf 标签中使用 Sa-Token -->
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>cn.dev33</groupId>
|
2025-03-24 15:40:54 +08:00
|
|
|
|
<artifactId>sa-token-thymeleaf</artifactId>
|
2021-10-11 01:09:28 +08:00
|
|
|
|
<version>${sa.top.version}</version>
|
|
|
|
|
</dependency>
|
|
|
|
|
```
|
2022-10-20 13:06:36 +08:00
|
|
|
|
<!-------- tab:Gradle 方式 -------->
|
|
|
|
|
``` gradle
|
|
|
|
|
// 在 thymeleaf 标签中使用 Sa-Token
|
2025-03-24 15:40:54 +08:00
|
|
|
|
implementation 'cn.dev33:sa-token-thymeleaf:${sa.top.version}'
|
2022-10-20 13:06:36 +08:00
|
|
|
|
```
|
|
|
|
|
<!---------------------------- tabs:end ---------------------------->
|
|
|
|
|
|
2021-10-11 01:09:28 +08:00
|
|
|
|
|
|
|
|
|
### 2、注册标签方言对象
|
|
|
|
|
在 SaTokenConfigure 配置类中注册 Bean
|
|
|
|
|
``` java
|
|
|
|
|
@Configuration
|
|
|
|
|
public class SaTokenConfigure {
|
|
|
|
|
// Sa-Token 标签方言 (Thymeleaf版)
|
|
|
|
|
@Bean
|
|
|
|
|
public SaTokenDialect getSaTokenDialect() {
|
|
|
|
|
return new SaTokenDialect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 3、使用标签方言
|
|
|
|
|
然后我们就可以愉快的使用在 Thymeleaf 页面中使用标签方言了
|
|
|
|
|
|
|
|
|
|
##### 3.1、登录判断
|
|
|
|
|
``` html
|
|
|
|
|
<h2>标签方言测试页面</h2>
|
|
|
|
|
<p>
|
|
|
|
|
登录之后才能显示:
|
|
|
|
|
<span sa:login>value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
不登录才能显示:
|
|
|
|
|
<span sa:notLogin>value</span>
|
|
|
|
|
</p>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 3.2、角色判断
|
|
|
|
|
``` html
|
|
|
|
|
<p>
|
|
|
|
|
具有角色 admin 才能显示:
|
|
|
|
|
<span sa:hasRole="admin">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
同时具备多个角色才能显示:
|
|
|
|
|
<span sa:hasRoleAnd="admin, ceo, cto">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
只要具有其中一个角色就能显示:
|
|
|
|
|
<span sa:hasRoleOr="admin, ceo, cto">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
不具有角色 admin 才能显示:
|
2023-06-19 00:17:15 +08:00
|
|
|
|
<span sa:notRole="admin">value</span>
|
2021-10-11 01:09:28 +08:00
|
|
|
|
</p>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 3.3、权限判断
|
|
|
|
|
``` html
|
|
|
|
|
<p>
|
|
|
|
|
具有权限 user-add 才能显示:
|
|
|
|
|
<span sa:hasPermission="user-add">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
同时具备多个权限才能显示:
|
|
|
|
|
<span sa:hasPermissionAnd="user-add, user-delete, user-get">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
只要具有其中一个权限就能显示:
|
|
|
|
|
<span sa:hasPermissionOr="user-add, user-delete, user-get">value</span>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
不具有权限 user-add 才能显示:
|
2023-06-19 00:17:15 +08:00
|
|
|
|
<span sa:notPermission="user-add">value</span>
|
2021-10-11 01:09:28 +08:00
|
|
|
|
</p>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 4、调用 Sa-Token 相关API
|
|
|
|
|
|
|
|
|
|
以上的标签方言,可以满足我们大多数场景下的权限判断,然后有时候我们依然需要更加灵活的在页面中调用 Sa-Token 框架API
|
|
|
|
|
|
|
|
|
|
首先在 SaTokenConfigure 配置类中为 Thymeleaf 配置全局对象:
|
|
|
|
|
|
|
|
|
|
``` java
|
2023-11-13 17:14:39 +08:00
|
|
|
|
@Configuration
|
2021-10-11 01:09:28 +08:00
|
|
|
|
public class SaTokenConfigure{
|
|
|
|
|
// ... 其它代码
|
|
|
|
|
|
|
|
|
|
// 为 Thymeleaf 注入全局变量,以便在页面中调用 Sa-Token 的方法
|
|
|
|
|
@Autowired
|
|
|
|
|
private void configureThymeleafStaticVars(ThymeleafViewResolver viewResolver) {
|
|
|
|
|
viewResolver.addStaticVariable("stp", StpUtil.stpLogic);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2024-07-29 00:43:55 +08:00
|
|
|
|
> [!WARNING| label:注意]
|
|
|
|
|
> 如果`SaTokenConfigure`继承了`WebMvcConfigurer`等类,可能会造成循环依赖,如果遇到,请新建一个其他配置类完成此项配置
|
2024-04-05 03:01:29 +08:00
|
|
|
|
|
|
|
|
|
|
2021-10-11 01:09:28 +08:00
|
|
|
|
然后我们就可以在页面上调用 StpLogic 的 API 了,例如:
|
|
|
|
|
|
|
|
|
|
``` html
|
|
|
|
|
<p>调用 StpLogic 方法调用测试</p>
|
|
|
|
|
<p th:if="${stp.isLogin()}">
|
|
|
|
|
从SaSession中取值:
|
|
|
|
|
<span th:text="${stp.getSession().get('name')}"></span>
|
|
|
|
|
</p>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2023-06-21 06:16:40 +08:00
|
|
|
|
### 5、代码提示
|
2021-10-11 01:09:28 +08:00
|
|
|
|
|
2023-06-21 06:16:40 +08:00
|
|
|
|
如果想在写标签属性时增加代码提示:
|
2021-10-11 01:09:28 +08:00
|
|
|
|
|
2023-06-21 06:16:40 +08:00
|
|
|
|

|
|
|
|
|
|
|
|
|
|
只需在头部声明增加上对应的命名空间即可:
|
|
|
|
|
|
|
|
|
|
``` html
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="zh" xmlns:sa="http://www.thymeleaf.org/extras/sa-token">
|
|
|
|
|
<head>
|
|
|
|
|
<!-- 代码 -->
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<!-- 代码 -->
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
```
|
2021-10-11 01:09:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|