zoukankan      html  css  js  c++  java
  • Shiro Authorizer授权器

    If Else授权

      角色检查 

    Subject currentUser = SecurityUtils.getSubject();
    
    if (currentUser.hasRole("administrator")) {
        //show the admin button 
    } else {
        //don't show the button?  Grey it out? 
    }

      角色断言

    Subject currentUser = SecurityUtils.getSubject();
    
    //guarantee that the current user is a bank teller and 
    //therefore allowed to open the account: 
    currentUser.checkRole("bankTeller");
    openBankAccount();

      权限检查

        基于Permission对象的权限检查

    Subject subject = SecurityUtils.getSubject();
            Permission permission = new DomainPermission("hello/world.action", "hello:world");
            if (subject.isPermitted(permission)) {
                //show the some button 
            } else {
                //don't show anything
            }

        基于字符串的权限检查

    Subject subject = SecurityUtils.getSubject();
            if (subject.isPermitted("hello:world")) {
                //show the some button 
            } else {
                //don't show anything
            }

    Shiro的默认org.apache.shiro.authz.permission.WildcardPermission实现定义的特殊冒号分隔格式

    Subject subject = SecurityUtils.getSubject();
            Permission permission = new WildcardPermission("hello:world");
            if (subject.isPermitted(permission)) {
                //show the some button 
            } else {
                //don't show anything
            }

       权限断言

    Subject subject = SecurityUtils.getSubject();
            subject.checkPermission(new WildcardPermission("hello:world"));

    注解授权

      @RequiresAuthentication注解

      当前Subject必须是认证通过了的才能访问该方法

    @RequiresAuthentication
        public void updateGood(Good good) {
            //this method will only be invoked by a
            //Subject that is guaranteed authenticated
        }

    相当于

    public void updateGood(Good good) {
            if (!SecurityUtils.getSubject().isAuthenticated())
                throw new AuthenticationException();
        }

       @RequiresGuest注解

        当前Subject只能是未注册的仅是一个客人

    @RequiresGuest
        public void updateGood(Good good) {
            //this method will only be invoked by a
            //Subject that is unknown/anonymous
        }

    相当于

    @RequiresGuest
        public void updateGood(Good good) {
            Subject subject = SecurityUtils.getSubject();
            PrincipalCollection principalCollection = subject.getPrincipals();
            if (principalCollection != null && !principalCollection.isEmpty())
                throw new AuthenticationException();
        }

      @RequiresPermissions注解

      当前Subject必须有指定的权限

    @RequiresPermissions("hello:world")
        public void updateGood(Good good) {
            
        }

      @RequiresRoles注解

      当前Subject必须是指定的角色

    @RequiresRoles("admin")
        public void updateGood(Good good) {
            
        }

      @RequiresUser注解

      当前Subject必须是注册过的

    @RequiresUser
    public void updateGood(Good good) {
    
    }

    相当于

    public void updateGood(Good good) {
            Subject subject = SecurityUtils.getSubject();
            PrincipalCollection principalCollection = subject.getPrincipals();
            if (principalCollection == null || principalCollection.isEmpty())
                throw new AuthenticationException();
        }

    授权过程

    权限

      多个值  

    hello:world,shiro

      通配符

    hello:*

      

  • 相关阅读:
    强化学习基础:蒙特卡罗和时序差分
    强化学习基础:基本概念和动态规划
    EM算法和高斯混合模型GMM介绍
    使用Tensorflow搭建自编码器(Autoencoder)
    神经网络介绍:梯度下降和正则化
    神经网络介绍:算法基础
    K均值聚类和DBSCAN介绍
    Zabbix安装过程中遇到的问题
    Docker容器操作基础命令(二)
    Docker的安装及基本用法(一)
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/8968046.html
Copyright © 2011-2022 走看看