zoukankan      html  css  js  c++  java
  • Authorization源码解析

    1、首先调用 Subject.isPermitted*/hasRole* 接口,其会委托给SecurityManager。SecurityManager 接着会委托给 Authorizer;

    Authorizer是真正的授权者,如果调用如isPermitted(“user:view”),其首先会通过• PermissionResolver 把字符串转换成相应的 Permission 实例;

    DelegatingSubject
    public boolean hasRole(String roleIdentifier) {
            return hasPrincipals() && securityManager.hasRole(getPrincipals(), roleIdentifier);
        }

    2、SecurityManager 接着会委托给 Authorizer;

    this.authorizer = new ModularRealmAuthorizer();
    public
    boolean hasRole(PrincipalCollection principals, String roleIdentifier) { return this.authorizer.hasRole(principals, roleIdentifier); }

    3、ModularRealmAuthorizer 进行多 Realm 匹配流程

    1)首先检查相应的 Realm 是否实现了实现了Authorizer;
    2)如果实现了 Authorizer,那么接着调用其相应的isPermitted*/hasRole* 接口进行匹配

    3)如果有一个Realm匹配那么将返回 true,否则返回 false。

    public boolean hasRole(PrincipalCollection principals, String roleIdentifier) {
            assertRealmsConfigured();
            for (Realm realm : getRealms()) {
                if (!(realm instanceof Authorizer)) continue;
                if (((Authorizer) realm).hasRole(principals, roleIdentifier)) {
                    return true;
                }
            }
            return false;
        }

     4、AuthorizingRealm中根据用户名去数据源中获取角色/权限,并进行判断

    public boolean hasRole(PrincipalCollection principal, String roleIdentifier) {
            AuthorizationInfo info = getAuthorizationInfo(principal);
            return hasRole(roleIdentifier, info);
        }
    
        protected boolean hasRole(String roleIdentifier, AuthorizationInfo info) {
            return info != null && info.getRoles() != null && info.getRoles().contains(roleIdentifier);
        }
  • 相关阅读:
    [Unity]关于Physic Material,物理碰撞
    [Unity]当多个立方体堆叠,堆叠处出现缝隙的处理方法
    反射基础
    数据库三种事务
    一、手写ORM实现数据库查询
    UDP协议
    Wireshark抓包理解APR协议
    DBeaver用户界面窗口失效 查询窗口不显示
    二、IP、路由协议
    解决图片存入时 A generic error occurred in GDI+ 报错
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/10460261.html
Copyright © 2011-2022 走看看