![ccc2110aeb9d77b0e9fa19fa1f7ed119.png](https://i-blog.csdnimg.cn/blog_migrate/59d724b3faf0f353c4140f9f4837bdfd.jpeg)
认证步骤:
1:拷贝依赖
![2bb3b97c956cd029f6b6c07f0ebe819f.png](https://i-blog.csdnimg.cn/blog_migrate/a8cefc9c01cf825114ea4c186d797d83.jpeg)
2:简单的配置shiro.ini配置文件, 模拟数据库用户列表
![cbdf3dd551a7ab08b77bee5d2ac8e7c6.png](https://i-blog.csdnimg.cn/blog_migrate/26d36d2a62bdbe3e906010eb15f9b86c.jpeg)
3:执行shiro登录登出操作
![463377d2cb28526aa9c14e80bdf6103e.png](https://i-blog.csdnimg.cn/blog_migrate/8fff35150d40a9c245a3017b0f42073f.jpeg)
如果创建的token里面的用户名和密码与shiro.ini中的一致,则subject.login(token)能登录成功
否则抛出异常:
认证常见的异常:
![bb76a8d8d2f0d613b0927c4a02b3928f.png](https://i-blog.csdnimg.cn/blog_migrate/a66b0afbe25ff87c64da555cc3187f65.png)
Shiro流程认证分析:
1、调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;
2、securityManager通过Authenticator(认证器)进行认证;
3、Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源);
4、IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
5、最后调用Subject.logout进行退出操作。
流程分析图:
![63928838726a6eef5c25af1e6646bab4.png](https://i-blog.csdnimg.cn/blog_migrate/327e9b2282bc5846606c9d90f642768d.jpeg)
![b624e31c0154d8db50fa657efa99bc92.png](https://i-blog.csdnimg.cn/blog_migrate/1255ba66c06dd2242d79830c4b55182a.png)
总结:这里的认证信息在配置文件Shiro.ini中,Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源),这里的Shiro.ini,模拟数据库用户列表
在 Shiro 中存在 Realm 这么个概念, Realm 这个单词翻译为 域,其实是非常难以理解的。
域 是什么鬼?和权限有什么毛关系? 这个单词Shiro的作者用的非常不好,让人很难理解。 那么 Realm 在 Shiro里到底扮演什么角色呢?
当应用程序向 Shiro 提供了 账号和密码之后, Shiro 就会问 Realm 这个账号密码是否对, 如果对的话,其所对应的用户拥有哪些角色,哪些权限。
所以Realm 是什么? 其实就是个中介。 Realm 得到了 Shiro 给的用户和密码后,有可能去找 ini 文件,也可以去找数据库,
Realm 就是干这个用的,它才是真正进行用户认证和授权的关键地方。