frame shiro 授权及原理简述

shiro 授权模式

shiro采用的是rbac授权模式
rbac,基于角色的权限管理,谁扮演什么角色,被允许做什么事情。


shiro 授权流程


shiro 授权方式

1、编程式

通过写if/else授权代码块完成

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole("admin")) {
    // 有权限
} else {
    // 无权限
}

2、注解式

通过在执行的java方法上放置相应的注解完成

如果主体里没有admin角色,不能进入方法
@RequiresRoles("admin")
public void hello() {
    // 有权限
}

3、JSP标签式

<shiro:hasRole name="admin">
    <!-- 有权限,这个按钮显示 -->
</shiro:hasRole>

shiro 授权流程分析

1、首先调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而SecurityManager接着会委托给Authorizer
2、Authorizer是真正的授权者,如果我们调用如isPermitted(“user:view”),其首先会通过PermissionResolver把字符串转换成相应的Permission实例;
3、在进行授权之前,其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限;
4、Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断,如果匹配如isPermitted*/hasRole*会返回true,否则返回false表示授权失败。

原文地址:https://www.cnblogs.com/Mike_Chang/p/9879083.html