实现在FreeMarker模板中控制对应按钮的显示隐藏主要用到了Shiro中的hasRole, hasAnyRoles, hasPermission以及Authenticated等方法,我们可以实现TemplateMethodModelEx类的相关操作,然后通过全局拦截器将对应的方法注入到视图模板中,就可以直接在ftl模板中使用自定义的方法进行判断了,具体代码如下:

第一步实现 HasPermissionFreeMarkerMethod

public class HasPermissionFreeMarkerMethod implements TemplateMethodModelEx {
@Override
public Object exec(List list) throws TemplateModelException {
if (null == list || 1 != list.size()) {
throw new TemplateModelException("Wrong arguments: only one argument is allowed");
}
Object permissionName = list.get(0);
return getSubject() != null && permissionName != null
&& getSubject().isPermitted(permissionName.toString());
} private static Subject getSubject() {
return SecurityUtils.getSubject();
}
}

第二步定义一个全局的拦截器

public class ShiroFreeMarkerInterceptor implements Interceptor {
@Override
public void intercept(Invocation ai) {
Controller c = ai.getController();
c.setAttr("hasRole", new HasRoleFreeMarkerMethod());
//c.setAttr("hasAnyRoles", new HasAnyRolesFreeMarkerMethod());
c.setAttr("hasPermission", new HasPermissionFreeMarkerMethod());
//c.setAttr("isAuthenticated", new AuthenticatedFreeMarkerMethod());
// 执行正常逻辑
ai.invoke();
}
}

第三步在AppConfig中配置全局拦截器

    /**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {
me.add(new ShiroInterceptor());
me.add(new AuthInterceptor());
me.add(new ShiroFreeMarkerInterceptor());//添加在FreeMarker视图中使用Shiro的拦截器
}

现在我们就可以在视图中直接来根据权限标识控制按钮的显示与隐藏了

<#if hasPermission("Trade:新增")>
<a class="btn_color_1" onclick="onEdit(0)"><i class="fa fa-plus"></i> 新增</a>
</#if>
<#if hasPermission("Trade:编辑")>
<a class="btn_color_2" onclick="onEdit()"><i class="fa fa-edit"></i> 编辑</a>
</#if>
<#if hasPermission("Trade:删除")>
<a class="btn_color_3" onclick="onDelete()"><i class="fa fa-remove"></i> 删除</a>
</#if>
<#if hasPermission("Trade:重新统计")>
<a class="btn_color_2" onclick="onTongJi()"><i class="fa fa-bolt"></i> 重新统计</a>
</#if>

JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用的更多相关文章

  1. Spring Boot 揭秘与实战(七) 实用技术篇 - FreeMarker 模板引擎

    文章目录 1. FreeMaker 代替 JSP 作为页面渲染 2. 生成静态文件 3. 扩展阅读 4. 源代码 Spring Boot 提供了很多模板引擎的支持,例如 FreeMarker.Thym ...

  2. Java之利用Freemarker模板引擎实现代码生成器,提高效率

    https://blog.csdn.net/huangwenyi1010/article/details/71249258  java模板引擎freemarker代码生成器 更多 个人分类: 一步一步 ...

  3. FreeMarker模板引擎

    现在开发的项目,也是基于SOA架构,每个功能接口都是用WebService实现,Web服务的通信协议就是用XML来传输. 以前写WebService都是自动生成XML,没想到这项目竟然要自己定义XML ...

  4. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  5. Spring Boot 2.0 整合 FreeMarker 模板引擎

    本篇博文将和大家一起使用Spring Boot 2.0 和FreeMarker 模板引擎整合实战. 1. 创建新的项目 2. 填写项目配置信息 3. 勾选web 模块 4. 勾选freemarker模 ...

  6. freemarker模板引擎的使用

    freemarker是一套前端模板引擎,在使用时,要先在web项目中添加freemarker.jar的依赖. 我在这里主要演示spring-mvc整合freemarker模板引擎.项目案例的文件包结构 ...

  7. Spring Boot☞ 使用freemarker模板引擎渲染web视图

    效果图 代码 package com.wls.integrateplugs.hello.controller; /** * Created by wls on 2017/8/24. */ import ...

  8. SpringBoot获取Freemarker模板引擎,生成HTML代码

    今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块 1.新建Freemarker模板 <li id="${comment.oId}"> < ...

  9. Layui 模板引擎中的 日期格式化

    原文:https://www.jianshu.com/p/948a474b5ed7 原文:https://blog.csdn.net/DCFANS/article/details/92064112 模 ...

随机推荐

  1. Android开发技巧——使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  2. Android进阶(十)Android 发邮件

    最近在做的APP涉及到发邮件,总结如下: 在android里进行邮件客户端开发可以有两种方式: 在邮件客户端的设计中,可以采用两种方法. 一种是调用android系统自带的邮件服务 优点:这种方法比较 ...

  3. ARM v7汇编与相关练习

    程序入口: _startc 语言入口: main@:              注释;main:           标签;伪指令:         给汇编器读的指令;.global main    ...

  4. Linux 中环境变量设置

    本文主要整理自以下博文: .bash_profile和.bashrc的什么区别及启动过程 linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH) .bash_profile 和 . ...

  5. (十一)延时执行、圆角(可实现圆形label)、代理设计模式

    延时执行: 使用控件的performSelector...方法,例如用于移除,可以写在一行. [lab performSelector:@selector(removeFromSuperview) w ...

  6. [FreeRadius2]遇到问题记录

    在学习FreeRadius2中遇到的问题,和解决. 使用的是2.2 版本,测试的系统是Centos6.7 radtest 没有响应 radiusd 启动正常,测试如下命令不好使 [root@orang ...

  7. Callable与Future

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...

  8. Unix/Linux中的grep命令(转)

    本文转载自:如何使用Unix/Linux grep命令——磨刀不误砍柴工系列.该博文条理很清晰. grep简介 grep在一个或多个文件中查找与模式字符串(pattern)匹配的行,并将搜索的结果打印 ...

  9. 中文注释 MariaDB my.cnf 大型服务器配置模板

    文件如下所示,请根据需要进行修改: 翻译日期: 2014年5月22日 翻译人员: 铁锚 # /usr/share/mysql/my-huge.cnf # MariaDB 配置文件 示例模板(huge, ...

  10. Linux文件系统管理命令(第二版)

    Linux文件系统管理命令 常用命令 1.df命令 查看分区使用情况 常用选项 -h 比较人性化 -m 以兆字节显示分区使用情况 显示信息: Mounted on:挂载点 Filesystem:对应的 ...