# Freemarker 自定义标签 本插件的作用是让我们可以在 Freemarker 页面中使用 Sa-Token 自定义标签以及相关API。 --- ### 1、引入依赖 首先我们确保项目已经引入 Freemarker 依赖,然后在此基础上继续添加: ``` xml cn.dev33 sa-token-freemarker ${sa.top.version} ``` ``` gradle // 在 Freemarker 页面中使用 Sa-Token 自定义标签 implementation 'cn.dev33:sa-token-freemarker:${sa.top.version}' ``` ### 2、注入 Sa-Token Freemarker 标签模板模型 对象 在 SaTokenConfigure 配置类中增加配置 ``` java @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()>... configurer.getConfiguration().setSharedVariable("sa", new SaTokenTemplateModel()); // 注入 Sa-Token Freemarker 全局对象,使之可以在 xxx.ftl 文件中调用 StpLogic 相关方法, // 例如:${stp.getSession().get('name')} configurer.getConfiguration().setSharedVariable("stp", StpUtil.stpLogic); } } ``` ### 3、使用自定义标签 然后我们就可以愉快的使用在 Freemarker 页面中使用 Sa-Token 自定义标签了 ##### 3.1、登录判断 ``` html

标签方言测试页面

登录之后才能显示: <@sa.login>value

不登录才能显示: <@sa.notLogin>value

``` ##### 3.2、角色判断 ``` html

具有角色 admin 才能显示: <@sa.hasRole value="admin">value

同时具备多个角色才能显示: <@sa.hasRoleAnd value="admin, ceo, cto">value

只要具有其中一个角色就能显示: <@sa.hasRoleOr value="admin, ceo, cto">value

不具有角色 admin 才能显示: <@sa.notRole value="admin">value

``` ##### 3.3、权限判断 ``` html

具有权限 user-add 才能显示: <@sa.hasPermission value="user-add">value

同时具备多个权限才能显示: <@sa.hasPermissionAnd value="user-add, user-delete, user-get">value

只要具有其中一个权限就能显示: <@sa.hasPermissionOr value="user-add, user-delete, user-get">value

不具有权限 user-add 才能显示: <@sa.notPermission value="user-add">value

``` ### 4、调用 Sa-Token 相关API 以上的自定义标签,可以满足我们大多数场景下的权限判断,然后有时候我们依然需要更加灵活的在页面中调用 Sa-Token 框架API : ``` html

从SaSession中取值: <#if stp.isLogin()> ${stp.getSession().get('name')}

```