Freemarker自定义标签弥补Shiro没有HasAnyPermissions缺陷

二丫头
• 阅读 3605

前言

之前在写某项目的时候,因为要进行到权限验证,而且页面是后端进行渲染的,所以我就要在输出的页面进行对应的权限显示,但是却发现Shiro标签中只有hasAnyRole这个标签,却没有对应的HasAnyPermissions,后来经过一些折腾,使用Freemarker自定义标签达到了这个效果。

正文

首先,先新建一个HasAnyPermissions类,并继承freemarker的TemplateMethodModelEx类,然后再使用shiro的checkPermission来循环验证是否包含传入的权限组的全部权限,代码如下:

/**
 * @author licoy.cn
 * @version 2017/9/11
 */
public class HasAnyPermissions implements TemplateMethodModelEx {
    @Override
    public Object exec(List list) throws TemplateModelException {
        if(list.size()<=0){
            throw new TemplateModelException("HasAnyPermissions - 错误参数");
        }
        org.apache.shiro.subject.Subject subject = SecurityUtils.getSubject();
        int index = 0;
        for (Object s : list){
            index++;
            SimpleScalar str = (SimpleScalar ) s;
            try {
                subject.checkPermission(str.getAsString());
            }catch (Exception e){
                if(index==list.size()){
                    return false;
                }
                continue;
            }
            return true;
        }
        return false;
    }
}

使用方法

在ftl页面中自定义变量:

<#assign hasAnyPermissions = "xxx.config.freemarker.HasAnyPermissions"?new()>;

然后在有需要的地方调用即可:

hasAnyPermissions('user:save','user:list')?c=='true'

原文链接:https://www.licoy.cn/2952.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
jango Form表单组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。Djangoform组件就实
Easter79 Easter79
3年前
springboot使用freemarker shiro标签
<!freemarkershiro(标签)begin<dependency<groupIdnet.mingsoft</groupId<artifactIdshirofreemarkertags</artifactId
Wesley13 Wesley13
3年前
jfinal自定义freemarker标签
jfinal自定义freemarker标签1.config修改freemarkerrenderpublicvoidafterJFinalStart(){super.afterJFinalStart();F
Stella981 Stella981
3年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django框架
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示显示对应的错误信息.。Djangoform组件
Stella981 Stella981
3年前
Shiro 小笔记
\shiro.inimain没有登入的用户跳转到/loginurlauthc.loginUrl/login不是这个角色或者权限所调整的页面roles.unauthorizedUrlpage/err.jspperms.unauthorizedUrlpage/err.
Shiro权限控制入门
Shiro权限控制是一款优秀的Java安全框架,可用于对Java应用程序进行身份验证、授权、加密和会话管理等功能。本文将简要介绍Shiro权限控制框架的几个关键概念和使用方法。