实现在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面试题目总结

    1.java 基础题,输入结果是什么? public static void main(String[] args) { String str = new String("abc" ...

  2. Java EE 之 过滤器入门学习与总结(1)

    使用Filter技术来配合开发会使得开发变得简单起来.简单的一个例子就表现在"乱码问题"上.不使用Filter的话,我们有可能需要为每一个网页设置字符编码集,如request.se ...

  3. A*寻路算法入门(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. UNIX环境高级编程——无名管道和有名管道

    一.进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2 ...

  5. 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ

    从JAVA核心技术卷轴Ⅰ:基础知识中整理得到. import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; i ...

  6. avcodec_decode_video2()解码视频后丢帧的问题解决

    使用libav转码视频时发现一个问题:使用下面这段代码解码视频时,视频尾巴上会丢掉几帧. while(av_read_frame(ifmt_ctx,&packet) >= 0){ ret ...

  7. 016-类与对象-OC笔记

    学习目标 1.[理解]对象在内存中的存储 2.[理解]nil和NULL 3.[了解]#pragma mark分组导航标记 4.[理解]方法与函数 5.[掌握]多文件开发 6.[掌握]对象和方法 7.[ ...

  8. 简译《Dissecting SQL Server Execution Plans》——连载总入口

    转载请注明出处 由于工作及学习需要,最近看了一下<Dissecting SQL Server Execution Plans>,这是少有的专门描述执行计划的优秀书籍,为了快速查找并供入门同 ...

  9. C/C++ Volatile关键词深度剖析(转)

    本文转载自博文C/C++ Volatile关键词深度剖析. 背景 前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议): 此微博,引发了朋友们的大量讨论:赞同者有之:批评者 ...

  10. 【一天一道LeetCode】#24. Swap Nodes in Pairs

    一天一道LeetCode系列 (一)题目 Given a linked list, swap every two adjacent nodes and return its head. For exa ...