zilean/开发文档/20190809_Shiro.md

14 lines
1.5 KiB
Markdown
Raw Normal View History

2019-08-15 01:25:05 +08:00
# Shiro权限管理框架
## SecurityManager
可以理解成控制中心,所有请求最终基本上都通过它来代理转发,一般我们程序中不需要直接跟他打交道。
## Subject
请求主体。比如登录用户比如一个被授权的app。在程序中任何地方都可以通过SecurityUtils.getSubject()获取到当前的subject。subject中可以获取到Principal这个是subject的标识比如登陆用户的用户名或者id等shiro不对值做限制。但是在登录和授权过程中程序需要通过principal来识别唯一的用户。
## Realm
通俗一点理解就是realm可以访问安全相关数据提供统一的数据封装来给上层做数据校验。shiro的建议是每种数据源定义一个realm比如用户数据存在数据库可以使用JdbcRealm存在属性配置文件可以使用PropertiesRealm。一般我们使用shiro都使用自定义的realm。
当有多个realm存在的时候shiro在做用户校验的时候会按照定义的策略来决定认证是否通过shiro提供的可选策略有一个成功或者所有都成功等。
## 总结
一个realm对应了一个CredentialsMatcher用来做用户提交认证信息和realm获取得用户信息做比对shiro已经提供了常用的比如用户密码和存储的Hash后的密码的对比。
## 使用Shiro主要做了三件事
1、用户登录时做用户名密码校验
2、用户登录后收到请求时做JWT Token的校验
3、用户权限的校验