ShiroRealm|学习笔记

简介: 快速学习 ShiroRealm

开发者学堂课程【Java 面试疑难点串讲 3:开发工具及框架ShiroRealm】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/26/detail/558


ShiroRealm

ShiroRealm 机制

Realm 是几乎所有的认证授权框架都具备的一个概念,那么所谓的 Realm 本身有两层含义:

进行用户的认证处理:主要是进行用户名或密码的判断,同时还可以判断出该用户是否被锁定;

用户的授权处理:进行角色或权限认证,而且这里面的认证所需要的就是根据用户名查询角色或权限的标记。于是在 Realm 里面就有一个容易混淆的概念了:Shiro中的 Session 与 HttpSession 的关系是什么?

如果说你现在使用的不是 WEB 程序,而是一个 Java 程序,那么 Shiro 中的认证与授权依然有效。

所以就可以得出一个结论: Shiro 有一套自己维护的 “Session” 机制(不等同于HttpSession)

如果要是在 WEB 中应用,实际上就表示该 ShiroSession 要结合 HttpSession 一起使用,也就是说在 ShiroSession 中保存的内容在 WEB 容器里面实质上是保存在了HttpSession 里面。

理解为 HttpSession 中存在有一个指定的 Shiro 属性。但是 Shiro 在设计的时候又考虑到了用户的使用习惯,所以对于一些用户的身份信息,那么会将这些身份的信息保存在 Session 里面,用户也可以直接利用 session 属性获得相关的身份信息。

不过对于授权处理需要有一些特殊的处理方式

授权的操作在实际检测之中有两类:

实时授权检测:

你现在修改了一个用户的角色或权限之后该配置立即生效,而且立即影响到已登录的用户;但是这样的操作需要频繁进行数据库的查询处理,所以一般不建议使用;

非实时授权检测:

因为用户的角色和权限几乎很少会被改动,所以这样频繁的进行数据库的查询性能会变差,正是因为如此,在实际的开发之中,会考虑在用户第一次使用角色和权限的时候会将数据信息查询出来,如果是单节点会将授权信息保存在内存里面(EHCache),如果是分布式集群,会将这些信息保存在 Redis 里面

总之就一个原则:不要在每一次进行用户授权检测的时候重复查询数据库即可。  

总结:

ShiroRealm 有一套自己的 Session,在  WEB 中该 Session 会在 HttpSession 里面保存数据,但是用户看不见这些。

有的授权处理一定要使用到缓存,否则会影响你的程序性能。

相关文章
|
存储 C语言 C++
C++学习笔记(day1)
C++学习笔记(day1)
|
数据采集 SQL 消息中间件
第三阶段总结|学习笔记
快速学习第三阶段总结
124 0
第三阶段总结|学习笔记
|
开发者
手动任务|学习笔记
快速学习手动任务
手动任务|学习笔记
|
Java 开发者
Loger 的使用|学习笔记
快速学习 Loger 的使用
386 0
Loger 的使用|学习笔记
|
自然语言处理 流计算 开发者
termQuery | 学习笔记
快速学习 termQuery
196 0
|
存储 Java 开发者
BinaryTree|学习笔记
快速学习BinaryTree
BinaryTree|学习笔记
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
108 0
|
人工智能 NoSQL JavaScript
正则查询|学习笔记
快速学习正则查询
108 0
|
Java 程序员 开发者
投票选举|学习笔记
快速学习投票选举
119 0
投票选举|学习笔记