【Shiro框架总结】3. 认证
目录
1. 身份认证流程
2. 具体实现
3. 加密、盐值加密
4. 多realm的实现、策略
一、身份认证
1. 身份验证
身份验证:一般需要提供如身份 ID 等一些标识信息来表明登录者的身份,如提供 email,用户名/密码来证明。
在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份。
- principals:身份,即主体的标识属性。可以是任何属性,如用户名、邮箱等,唯一即可。一个主体可以有多个 principals,但只有一个Primary principals,一般是用户名/邮箱/手机号。
- credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。
最常见的 principals 和 credentials 组合就是用户名/密码
2. 身份验证流程
二、具体实现
1. 创建一个表单界面
2. 创建一个Handler
【提示】项目里面配置了视图解析器
3. 配置applicationContext.xml里面的过滤器
【提示】上面property的name的属性值不是自定义的,是固定的。
4. 编辑Realm
(1)认证流程
(2)密码对比
https://blog.****.net/acmman/article/details/78446008
【提示】doGetAuthenticationInfo方法的参数token是Controller的login方法的参数传递过来的!密码的对比是由shiro自动完成的。
5. 密码加密
(1)在applicationContext.xml中配置realm
【提示】配置完成之后,前台的明文密码会被自动加密!
(2)原密码 123456 加密后的结果,加密后的结果是要存到数据库的
(3)把步骤二中加密后的结果粘贴到下面,其实就是模拟从数据库中获取的密码
(4)测试
前台输入密码123456,配置文件中的realm配置会把前台的密码加密,然后shiro会把从数据库中获取的密码与加密后的前台密码比对!
6. 盐值加密
(1)为什么要进行盐值加密?
因为两个人的密码如果一样,那么加密后的密码也是一样的!为了防止出现这种情况,也就是实现两个人的明文密码即使一样,加密之后的密文密码也不一样,这就是盐值加密。
(2)如何实现
(3)具体步骤
- 给name是admin、user且密码都是123456的用户进行盐值加密,加密后的密码不一致
- 具体实现
7.多realm验证
上面的是ShiroRealm,是MD5加密的。SecondRealm是SHA1加密,下面是改动的地方
(1)修改加密算法
(2)配置
修改下面的
改成下面的这样
【注意】多realm的验证是有顺序的!与list集合配置的顺序一样
(3)多realm的另外一种配置
8. 多realm的认证策略
(1)修好默认的认证策略
(2)还原默认的多realm认证策略