【Shiro框架总结】3. 认证

目录

1. 身份认证流程

2. 具体实现

3. 加密、盐值加密

4. 多realm的实现、策略

 

一、身份认证

1. 身份验证

身份验证:一般需要提供如身份 ID 等一些标识信息来表明登录者的身份,如提供 email,用户名/密码来证明。
在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份。

 

  •  principals:身份,即主体的标识属性。可以是任何属性,如用户名、邮箱等,唯一即可。一个主体可以有多个 principals,但只有一个Primary principals,一般是用户名/邮箱/手机号。
  •  credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。

最常见的 principals 和 credentials 组合就是用户名/密码

2. 身份验证流程

【Shiro框架总结】3. 认证

 

二、具体实现

1. 创建一个表单界面

【Shiro框架总结】3. 认证

 

2. 创建一个Handler

【Shiro框架总结】3. 认证

【提示】项目里面配置了视图解析器

 

3. 配置applicationContext.xml里面的过滤器

【Shiro框架总结】3. 认证

【提示】上面property的name的属性值不是自定义的,是固定的。

 

4. 编辑Realm

【Shiro框架总结】3. 认证

               【Shiro框架总结】3. 认证  

                【Shiro框架总结】3. 认证

(1)认证流程

【Shiro框架总结】3. 认证

(2)密码对比

         https://blog.****.net/acmman/article/details/78446008

【提示】doGetAuthenticationInfo方法的参数token是Controller的login方法的参数传递过来的!密码的对比是由shiro自动完成的。

 

5. 密码加密

(1)在applicationContext.xml中配置realm

【Shiro框架总结】3. 认证

   【Shiro框架总结】3. 认证

 【提示】配置完成之后,前台的明文密码会被自动加密!

 

(2)原密码 123456 加密后的结果,加密后的结果是要存到数据库的

    【Shiro框架总结】3. 认证

(3)把步骤二中加密后的结果粘贴到下面,其实就是模拟从数据库中获取的密码

        【Shiro框架总结】3. 认证

(4)测试

前台输入密码123456,配置文件中的realm配置会把前台的密码加密,然后shiro会把从数据库中获取的密码与加密后的前台密码比对!

 

6. 盐值加密

(1)为什么要进行盐值加密?

因为两个人的密码如果一样,那么加密后的密码也是一样的!为了防止出现这种情况,也就是实现两个人的明文密码即使一样,加密之后的密文密码也不一样,这就是盐值加密。

(2)如何实现

【Shiro框架总结】3. 认证

(3)具体步骤

  • 给name是admin、user且密码都是123456的用户进行盐值加密,加密后的密码不一致

【Shiro框架总结】3. 认证

 

  • 具体实现

【Shiro框架总结】3. 认证

【Shiro框架总结】3. 认证

 

7.多realm验证

【Shiro框架总结】3. 认证

上面的是ShiroRealm,是MD5加密的。SecondRealm是SHA1加密,下面是改动的地方

(1)修改加密算法

     【Shiro框架总结】3. 认证

(2)配置

【Shiro框架总结】3. 认证

 

【Shiro框架总结】3. 认证

 

修改下面的

【Shiro框架总结】3. 认证

改成下面的这样

【Shiro框架总结】3. 认证

【注意】多realm的验证是有顺序的!与list集合配置的顺序一样

(3)多realm的另外一种配置

【Shiro框架总结】3. 认证

【Shiro框架总结】3. 认证

 

8. 多realm的认证策略

【Shiro框架总结】3. 认证

 

(1)修好默认的认证策略

【Shiro框架总结】3. 认证

(2)还原默认的多realm认证策略 

【Shiro框架总结】3. 认证