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);
        }
  • 相关阅读:
    图解JavaScript原型和原型链
    hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
    JS中数组和字符串的方法大全
    用js实现排列组合
    js中一个对象当做参数传递时候?
    用JavaScript按一定格式解析出URL 串中所有的参数
    从Object.definedProperty中看vue的双向数据的绑定
    Uncaught (in promise) TypeError:的错误
    vue之生命周期的一点总结
    原子性和原子性操作
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/10460261.html
Copyright © 2011-2022 走看看