①
在平台内我们通过一些加密算法保存了 A 用户的Principals 信息(一般只会对密码加密),该初始化加密算逻辑里面包含了MD5加密算法(不可逆)、加密次数、盐值(一般为用户名),产生的安全数据我们表示为 Security Data A
②
通过Shiro Cryptography 模拟数据即当 A 用户登录平台式我们将把 A 用户提交的用户名和密码通过特定的加密算法(此处的特定算法指算法逻辑必须要和初始化加密算法逻辑一样即加密算法、加密次数、盐值必须一会)。产生的安全数据我们表示为 Security Data B
③
将 Security Data A 与 Security Data B 对比。对比的过程有Shiro SimpleAuthenticationInfo 封装方法完成,我们只需调用即可,下面有代码提现。
④-⑤
最后将比较的结果分流至不同的逻辑块中
1、初始化加密保存
在对数据初始化加密时我们要事先定好加密逻辑即使用什么加密算法合适,是否需要添加额外的盐值,加密次数为多少次合适等等。因为我们知道加密的算法有很多种比如 base64、SHA-1、MD5 等等。初始化产生的安全数据是否具有可逆性将直接影响我们 shiro 的 加密算法的实现。比如使用的是 SHA-1 产生了不可逆的数据,此时我们只能重新模拟数据然后作对比,如果base64等,我们直接使用 安全数据做逆向处理而不是在去模拟。
Realm 领域
- 一个realm管理一系列user、Credentials、roles、groups。
- 一个user隶属于一个realm
- 一个user也只能log in 一个realm
- Realm彼此之间是隔离的
- 每个realm只能管理和认证自己控制的user