Shiro Realm 权限的验证流程和缓存机制

简介: Shiro Realm 权限的验证流程和缓存机制

我们可以定义多个Realm权限类,继承AuthenticatingRealm。


如果是这样,那Shiro验证的策略和顺序是怎样的呢?


策略

通过查看源码,Shiro的Spring Boot自动配置是至少一个通过策略,即有一个权限类通过就判定有权限并通过。


自动配置类:


org.apache.shiro.spring.config.web.autoconfigure.ShiroWebAutoConfigurationimage.png其他还有全部通过、首个通过,更多可以查看Shiro包下面的权限策略。


org.apache.shiro.authc.pam


顺序

Shiro是按在Spring Boot配置类中定义Realm Bean的顺序进行验证权限的。


验证流程

假设现在有R1,R2权限类,现在我们对一个方法或者路径配置了A角色,B、C权限,Shiro会在R1中找A角色,找到则继续验证其他权限,找不到根据策略决定,如果说不是全部都要通过的策略则会继续在R2中找A角色,找不到则跳到指定的未授权链接,B、C权限验证流程也是一致。


Shiro缓存

为了权限验证的效率性能,Shiro对认证和授权是有缓存开关控制的。


需要了解的权限类层次是,每个Realm都继承AuthorizingRealm,AuthorizingRealm继承自AuthenticatingRealm。AuthenticatingRealm是认证的逻辑,AuthorizingRealm是授权的逻辑。


通过查看AuthorizingRealm和AuthenticatingRealm源码,默认的认证缓存是关闭的,授权缓存是开启的。


authorizationCachingEnabled = true; // 授权


authenticationCachingEnabled = false; // 认证


这里默认开启了缓存还不行,还需要设置CacheManager,如下。

image.png具体的缓存逻辑可以翻阅以下源码。


org.apache.shiro.realm.AuthorizingRealm#getAuthorizationInfo


org.apache.shiro.realm.AuthenticatingRealm#getAuthenticationInfo


设置缓存开关

有的时候我们的权限不是固定的,需要动态的调整授权,所以希望某些Realm不需要缓存。


我们可以在当前Realm中手动关闭某它的的授权缓存。image.png同上,默认关闭的认证的缓存也可以通过设置进行打开。


根据具体的业务进行灵活调整。


推荐去我的博客阅读更多:


1.Java JVM、集合、多线程、新特性系列教程


2.Spring MVC、Spring Boot、Spring Cloud 系列教程


3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程


4.Java、后端、架构、阿里巴巴等大厂最新面试题


觉得不错,别忘了点赞+转发哦!


image.png

相关文章
|
3月前
|
存储 缓存 前端开发
HTTP的缓存机制是什么?
HTTP的缓存机制是什么?
28 1
|
6月前
|
SQL 缓存 Java
Mybatis-plus缓存机制
MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。 在MyBatis中,缓存分为一级缓存和二级缓存。 1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,
232 0
|
7月前
|
缓存 Java 数据库连接
深入浅出 MyBatis 的一级、二级缓存机制
深入浅出 MyBatis 的一级、二级缓存机制
139 0
|
6月前
|
存储 缓存 Java
【面试题精讲】Java包装类缓存机制
【面试题精讲】Java包装类缓存机制
|
7月前
|
存储 缓存 BI
06-OC方法缓存机制cache_t
06-OC方法缓存机制cache_t
65 0
|
3月前
|
存储 消息中间件 缓存
redis的缓存机制
redis的缓存机制
92 0
|
3天前
|
缓存 Linux
linux系统缓存机制
linux系统缓存机制
|
14天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
49 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
1月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
145 1
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制

热门文章

最新文章