shiro-重写标签功能----shiro:hasPermission 标签重写

public abstract class ShiroAuthorizingRealm extends AuthorizingRealm{

    private static final String OR_OPERATOR = " or ";
    private static final String AND_OPERATOR = " and ";
    private static final String NOT_OPERATOR = "not ";

    @Override
    public boolean isPermitted(PrincipalCollection principals, String permission) {
        /*理解问题:传递过来的字符串的格式:
            或者格式 : 权限1 or 权限2
            与格式:      权限1 and 权限2
           非格式:       not 权限1
          */

        //步骤:通过判断来实现三种操作符
        if (permission.contains(OR_OPERATOR)) {
            //如果有任何一个权限,返回true,否则返回false
            String[] permissions = permission.split(OR_OPERATOR);
            for (String p : permissions) {
                //只要有一个权限是通过验证的就返回true
                if (this.isPermittedWithNotOperator(principals, p)) {
                    return true;
                }
            }
            return false;

        }else if (permission.equals(AND_OPERATOR)) {
            //必须两个权限都有,返回true.否则返回false
            String[] permissions = permission.split(AND_OPERATOR);
            for (String p : permissions) {
                //只要有一个权限是false的,我们就返回假
                if (this.isPermittedWithNotOperator(principals, p)==false) {
                    return false;
                }
            }
            return true;

        }else {
            //如果没有关键字,按正常方式执行
            return this.isPermittedWithNotOperator(principals, permission);
        }

    }

    private boolean isPermittedWithNotOperator(PrincipalCollection principals, String permission) {
        //判断权限字符串前缀是否有"not "关键字。
        if(permission.startsWith(NOT_OPERATOR)) {
            //如果有,就返回相反的结构
            return !super.isPermitted(principals, permission.substring(NOT_OPERATOR.length()));
        } else {
            return super.isPermitted(principals, permission); 

        }
    }
}

<shiro:hasPermission name="modular:to_edit or modular:delete">
                                                    
 </shiro:hasPermission>

<shiro:hasPermission name="modular:to_edit or modular:delete">
                                                    
 </shiro:hasPermission>

<shiro:hasPermission name="modular:to_edit or modular:delete">
                                                    
 </shiro:hasPermission>

原文地址:https://www.cnblogs.com/vieta/p/11139765.html

时间: 2024-10-11 00:02:13

shiro-重写标签功能----shiro:hasPermission 标签重写的相关文章

Shiro学习(9)JSP标签

Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮. 导入标签库 Java代码   <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义. guest标签 Java代码   <shiro:guest> 欢迎游客访问,<a href=

html5仿小红书的图片标签功能

最近做了这样的一个功能,在wap网页上实现类似小红书app里的图片标签功能,很是蛋疼. 上传页示例如下图: 可以看到最上面的①是展示区域,也是编辑标签的操作区域:中间②是可滑动的缩略图,在此选择要编辑的图片:最下面③是"添加图片"和"添加标签"两个按钮. 废话不多说,下面介绍具体实现思路. 首先就是要有"选择图片"的按钮. 1 <input type="file" name="fileToUpload"

仿半塘图片加入标签功能

模仿半塘app的图片加入标签功能,刚開始反编译了半塘的代码,结果代码太多了,用一些三方的东西.觉的比較麻烦,这里自己写了一下实现.感觉和半塘的没啥差别(自我感觉良好,嘿嘿) 一.半塘功能实现步骤 二.半塘实现分析 功能分析 - 本地相冊选择 - 加入图片 - 加入标签 - 标签移动 - 标签动画切换 - 图片生成 实现说明 (1) 标签类型有两种 第一种是单个标签 另外一种是两个标签 (2) 第一种标签的包括:原点和文字 (3) 第二步标签包括:原点.文字和横线 (4) 原点的位置是点击的位置

Django web开发【5】 实现标签功能

标签tag在很多web2.0应用中都很常见,标签其实就是关联某些信息的一个关键字.打标签实际上就是给内容分配标签的过程,它通常由作者或者用户实现.标签之所有这么流行是因为它允许用户对自己创建的博客.图像.链接等等进行分类. 既然我们要创建的是社交型网络收藏夹,标签自然非常重要,为了引进标签,我们需要一个机制来允许用户在提交bookmarks的时候带上标签一起存进数据库,并且可以浏览某个标签下的所有bookmarks. Tag 数据模型 标签需要保存在数据库中,并且与bookmarks相关联,所以

网页标签功能插: jQuery tags input 翻译api

看名字应该知道是干嘛用了吧. 这种规格标签,因为在写一个后台,用到这种场景,vuejs又没什么可用的,所以这种交互性极强的 ,还是离不开jquery啊. 后悔没用react 开发, 结合ant 里面插件都有.唉,多说无用 ,.我们来看下吧 vuejs 我自己写了好多 组件,到时我会开源  github上去 转自:jQuery Tags Input Plugin(添加/删除标签插件) 一个jquery开发的标签功能加强插件,可以生成或删除标签,还能对输入重复标签进行检查,和JQuery autoc

2_Jsp标签_传统标签功能简介

1传统标签接口关系:                                   2功能简介                                                   3代码测试                                                   1.标签体内容控制 StartTag package com.tag; import javax.servlet.jsp.JspException; import javax.servl

leangoo更换背景、设置颜色标签功能上线啦!

leangoo看板背景太单调?卡片标签想要添加多个?没有问题,Leangoo的本次更新就给大家带来了漂亮背景和实用的颜色标签设置,接下来就让我们一起来看看吧! 设置背景: 点击看板右上角个人头像图标按钮,弹出的下拉框中第一个就是设置背景按钮,点击一下即可看到下拉的所有可选背景.36种背景一一列在其中,赶紧为自己的看板界面选择一个吧! Tips:看板设置的背景只应用于个人,每个成员都可设置自己的背景. 设置颜色标签: 本次版本更新,我们对卡片设置颜色的功能进行了稍微修改并强化,具体如下 卡片可以设

网站搭建 (第19天) 标签功能

一.前言 在逛开源中国社区的时候,发现每一篇博客下面都有一行文章的标签,大概就是文章中的代码类型以及使用到的模块之类的.如下图,我的开源中国社区地址是:https://my.oschina.net/zhenfei,用了一段时间后废弃了,转到了博客园,所以上面的文章是不全的. 转而想到自己的网站,我也想添加一个这样的功能.那么在Django中,非常轻松地就能通过ManyToManyField字段来将文章与标签相互关联.先看一个官方文档的例子来说明下: @python_2_unicode_compa

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="