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:*

      

  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/8968046.html
Copyright © 2011-2022 走看看