从上图中,我们可以知道授权流程如下:
- 调用Subject.isPermitted*/hasRole*接口
- 委托给SecurityManager
- 而SecurityManager接着会委托给Authorizer
- Authorizer会判断Realm的角色/权限是否和传入的匹配
- 匹配如isPermitted*/hasRole*会返回true,否则返回false表示授权失败
追踪一下源码如下:
所以shiro判断用户是否有权限首先会从realm中获取用户所拥有的权限角色信息,然后再匹配当前的角色或权限是否包含,从而判定用户是否有权限!
说到权限,很多人自然会想起权限系统,涉及到几个关键对象:
- 主体(Subject)
- 资源(Resource)
- 权限(Permission)
- 角色(Role)
通过这几个要素,可以设计出比较合理的权限系统。
Shiro常见3种授权判断方式:
- 编码实现
注解实现 JSP Taglig实现,freemarker等类似
jsp页面引入shiro标签