zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    删除CSDN上传图片水印
    Win10任务栏中隐藏/恢复日期显示
    使用idea和gradle编译spring5源码
    错误:找不到或无法加载主类
    判断字符串是否为数字
    mysql根据json数据过滤
    mysql当不存在时插入
    org.apache.xerces.parsers.SAXParser
    mybatis mapper判断if条件写法
    《Java面向对象编程》
  • 原文地址:https://www.cnblogs.com/vieta/p/11139765.html
Copyright © 2011-2022 走看看