首先先来看下授权的流程图在来详细解释:
流程如下及断点:
• 1、首先调用 Subject.isPermitted*/hasRole* 接口,其会委托给SecurityManager,而 SecurityManager 接着会委托给 Authorizer;
hasRole:
isPermitted:
• 2、Authorizer是真正的授权者,如果调用如isPermitted("user:view"),其首先会通过PermissionResolver 把字符串转换成相应的 Permission 实例;
• 3、在进行授权之前,其会调用相应的 Realm 获取 Subject 相应的角色/权限用于匹配传入的角色/权限;
• 4、Authorizer 会判断 Realm 的角色/权限是否和传入的匹配,如果有多个Realm,会委托给 ModularRealmAuthorizer 进行循环判断,如果匹配如 isPermitted*/hasRole* 会返回true,否则返回false表示授权失败。
这个就是授权流程的源码。自己可以进行试验下。
接下来,我们来写一个实例来测试下吧!