mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
3.3 KiB
3.3 KiB
Freemarker 自定义标签
本插件的作用是让我们可以在 Freemarker 页面中使用 Sa-Token 自定义标签以及相关API。
1、引入依赖
首先我们确保项目已经引入 Freemarker 依赖,然后在此基础上继续添加:
<!-- 在 Freemarker 页面中使用 Sa-Token 自定义标签 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-freemarker</artifactId>
<version>${sa.top.version}</version>
</dependency>
// 在 Freemarker 页面中使用 Sa-Token 自定义标签
implementation 'cn.dev33:sa-token-freemarker:${sa.top.version}'
2、注入 Sa-Token Freemarker 标签模板模型 对象
在 SaTokenConfigure 配置类中增加配置
@Configuration
public class SaTokenConfigure {
@Autowired
FreeMarkerConfigurer configurer;
/**
* 注入 Sa-Token Freemarker 标签模板模型 对象
*/
@PostConstruct
public void setSaTokenTemplateModel() throws TemplateModelException {
// 注入 Sa-Token Freemarker 标签模板模型,使之可以在 xxx.ftl 文件中使用 sa 标签,
// 例如:<#if sa.login()>...</#if>
configurer.getConfiguration().setSharedVariable("sa", new SaTokenTemplateModel());
// 注入 Sa-Token Freemarker 全局对象,使之可以在 xxx.ftl 文件中调用 StpLogic 相关方法,
// 例如:<span>${stp.getSession().get('name')}</span>
configurer.getConfiguration().setSharedVariable("stp", StpUtil.stpLogic);
}
}
3、使用自定义标签
然后我们就可以愉快的使用在 Freemarker 页面中使用 Sa-Token 自定义标签了
3.1、登录判断
<h2>标签方言测试页面</h2>
<p>
登录之后才能显示:
<@sa.login>value</@sa.login>
</p>
<p>
不登录才能显示:
<@sa.notLogin>value</@sa.notLogin>
</p>
3.2、角色判断
<p>
具有角色 admin 才能显示:
<@sa.hasRole value="admin">value</@sa.hasRole>
</p>
<p>
同时具备多个角色才能显示:
<@sa.hasRoleAnd value="admin, ceo, cto">value</@sa.hasRoleAnd>
</p>
<p>
只要具有其中一个角色就能显示:
<@sa.hasRoleOr value="admin, ceo, cto">value</@sa.hasRoleOr>
</p>
<p>
不具有角色 admin 才能显示:
<@sa.notRole value="admin">value</@sa.notRole>
</p>
3.3、权限判断
<p>
具有权限 user-add 才能显示:
<@sa.hasPermission value="user-add">value</@sa.hasPermission>
</p>
<p>
同时具备多个权限才能显示:
<@sa.hasPermissionAnd value="user-add, user-delete, user-get">value</@sa.hasPermissionAnd>
</p>
<p>
只要具有其中一个权限就能显示:
<@sa.hasPermissionOr value="user-add, user-delete, user-get">value</@sa.hasPermissionOr>
</p>
<p>
不具有权限 user-add 才能显示:
<@sa.notPermission value="user-add">value</@sa.notPermission>
</p>
4、调用 Sa-Token 相关API
以上的自定义标签,可以满足我们大多数场景下的权限判断,然后有时候我们依然需要更加灵活的在页面中调用 Sa-Token 框架API :
<p>
从SaSession中取值:
<#if stp.isLogin()>
<span>${stp.getSession().get('name')}</span>
</#if>
</p>