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表示授权失败。