Shiro安全框架(Shiro与SpringBoot整合开发)CacheManager(四)Shiro缓存实现(ehCache自带缓存)

shiro会话管理 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。 基础组件 1.1 Se... 阅读详情

在之前的文章中,介绍shiro一直从shiro的.ini文件的权限认证,到在自定义Realm中的权限认证的实现,到后期我们链接数据库的权限实现,然后是自定义Realm中授权信息实现,到链接数据库的授权实现。粗粒度的授权实现角色,以及细粒度的权限字符串的授权实现。我们都一一做了解释和Demo。那么我们现在要考虑到一个系统的雏形搭建起来之后,就要考虑到一些优化的小问题,逼如说我们的权限数据一般来说不会有太大的变动,然而我们这时做的权限,授权等等的操作一直都会访问数据库,如果我们的系统访问量很大,相应的访问首页的次数也会增多,此时我们就要考虑到调用权限验证的时候回对数据库造成不小的压力,此时就要引入缓存,将我们的权限认证,授权等操作的数据放入到缓存中会在一定程度上减轻我们数据库访问的压力。

那首先我们就要来大概先了解一下shiro中为我们提供了一个CacheManager的一个接口,我们日后就可以通过实现CacheManager接口来实现自定义缓存。

大概流程:

如上图所示,我们再Shiro中的认证授权,之前是自定义Realm直接去数据库中查询认证授权的数据,然后再放入缓存中去操作,而加入缓存管理器之后我们的自定义Realm会优先去缓存管理器中去找数据,如果要找的数据在缓存管理器中有,则直接使用,如果缓存管理器中没有则去数据库中查询然后放入缓存管理器中,以便下次查询使用。有一点要记住的是,我们要是用缓存的场景是查询多而增删改极少的时候才会用到缓存,如果增删改多的场景使用缓存,我们还要去维护缓存中的数据和数据库中的数据就有一些得不偿失了。

首先要引入ehcache的pom坐标:

<!--引入shiro和ehcache-->
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-ehcache</artifactId>
  <version>1.5.3</version>
</dependency>

引入依赖之后,我们就要去ShiroConfig文件中去修改一下配置信息:

/**
 * shiro配置类
 */
@Configuration
public class ShiroConfig {

    //1.创建Shiro过滤器
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
        Map<String, String> map = new HashMap<>();
        map.put("/login.jsp", "anon");
        map.put("/register.jsp", "anon");
        map.put("/index.jsp", "authc");
        shiroFilterFactoryBean.setLoginUrl("/login.jsp");
        shiroFilterFactoryBean.setUnauthorizedUrl("/error.jsp”");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
        return shiroFilterFactoryBean;
    }

    //2.创建安全管理器
    @Bean
    public DefaultWebSecurityManager defaultWebSecurityManager(Realm realm) {
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        defaultWebSecurityManager.setRealm(realm);
        return defaultWebSecurityManager;
    }

    //3.创建自定义Realm
    @Bean
    public Realm realm() {
        MyRealm myRealm = new MyRealm();
        //1.修改凭证匹配器
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName("MD5");
        hashedCredentialsMatcher.setHashIterations(1024);
        myRealm.setCredentialsMatcher(hashedCredentialsMatcher);

        //开启缓存管理
        myRealm.setCacheManager(new EhCacheManager());
        //开启全局缓存设置为true
        myRealm.setCachingEnabled(true);
        //开启认证的缓存设置为true
        myRealm.setAuthenticationCachingEnabled(true);
        //给认证数据在缓存中设置一个名字
        myRealm.setAuthenticationCacheName("authenticationCache");
        //开启授权的缓存设置为true
        myRealm.setAuthorizationCachingEnabled(true);
        //给授权数据在缓存中设置一个名字
        myRealm.setAuthorizationCacheName("authorizationCache");

        return myRealm;
    }
}

上面的这段代码,在自定义Realm中我们可以看到我们开启了缓存管理,并开启全局缓存设置为true,然后开启认证数据的和授权数据的缓存,并且在缓存中给两个不同数据的两个不同的名字。开启授权和认证的缓存是在开启全局缓存的基础之上的。

可以看一下效果:

我在自定义Realm中往控制台输出了一段话:调用验证,然后登陆访问首页看一下控制台我们可以看到控制台输出了如下的话:

之后我们清掉控制台,再来刷新首页看一下控制台:

可以看到我们的缓存确实是起到了作用。

而这个ehcache的缓存是存在本地应用的缓存,如果我们的应用关闭或重启启动之后缓存就会消失,日后我们还考虑要将数据加入到redis中,这样不论我们应用是关闭或者重启,只要缓存的redis中有数据就会去缓存中查询。

spring boot整合redis,实现shiro的CacheManager 接着上一篇博客来讲:Spring Boot整合jpa,Shiro进行权限管理 Shiro默认整合了EhCache,来实现缓存,如果我们想用redis替换EhCache来实现缓存怎么做了?我们可以从Shiro的源码来找到一些端倪。我们可以模拟EhCacheManager的实现方式,EhCacheManager类定义如下: public class EhCacheManager implement 阅读详情

相关推荐

SpringBoot 集成Shiro之使用Redis缓存授权认证信息

因为用户认证与授权需要从数据库中查询并验证信息,但是对于权限很少改变的情况,这样不断从数据库中查询角色验证权限,对整个系统的开销很大,对数据库压力也随之增大。因此可以将用户认证和授权信息都缓存起来,第一次缓存没有的时候会自动从数据库中获取,并添加到缓存中;如果缓存中已经有该登录用户的认证和权限信息就直接从缓存中拿。 使用CacheManager Cache的作用 用来减轻数据库的访问压力,从而提升查询效率。 流程 使用默认的EhCache实现缓存 1、引入Ehcache相关依赖 <!.

编程小白养成手记 1802

shiro使用CacheManager

1.Cache 作用 Cache 缓存: 计算机内存中一段数据 作用: 用来减轻DB的访问压力,从而提高系统的查询效率 流程: 2.使用shiro中默认EhCache实现缓存 引入依赖 <!--引入shiro和ehcache--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <v

菜鸡的博客 3453

傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)

本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。

weixin_29090677的博客 150

shiro中CacheMananger(缓存管理器)

文章目录使用EhCache实现缓存1.引入maven依赖开启缓存使用redis实现缓存引入maven依赖 使用EhCache实现缓存 shiro 默认使用 EhCache实现本地缓存 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点 1.引入maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-ehcache --> <dependency> <groupI

qq_42418169的博客 2291

片上眼图(Eye-opening monitor)

当它们值不同的时候error counter +1,通过统计RX到的码元个数、error counter,可以获得offset sampler上下左右不停的调整位置时的一个误码率(BER),通过这个误码率去描绘出眼图。如上图所示,eye-scan RX端 offset sampler独立且并行的和使用CDR sample的采样电路一起跑,offset-sampler可以任意调整水平(time)和垂直(voltage)方向的偏移(如下图所示),在一个UI内产生一个全新的sample点。

沈土豪的书屋 4414

5G(NR)物理层面试问答

1.什么是参数集(Numerologies)? 答:在5G中由于其频段很宽,设置了不同的子载波带宽,另根据频段、循环前缀、帧结构等组成了参数集。 2.5G中的循环前缀有几种? 答:5G网络支持5种子载波间隔,有两种循环前缀(正常和扩展)。其中:参数集2,即子载波间隔60kHz支持常规循环前缀和扩展循环前缀。 3.5G无线网络在下行(DL)和上行(UL)均使用OFDM波形? 答:5G网络下行链路(DL)和上行链路(UL)使用的波形及处理见下图: 4.5G物理层帧和子帧是多长时间? 答:5G.

starts1990的博客 2377

3.CacheManager(shiro缓存管理)

上一章我们讲了SecurityManager,接下来的章节顺序是根据SecurityManager的依次实现类的依赖组件来讲。 在讲cacheManager前,我们先了解下Cache。 Cache有效的存储临时对象来提升应用的性能。由于Cache不属于安全框架的核心功能,所以shiro本身并没有完全实现Cache机制。Cache接口相当于底层的缓存框架的顶层接口,shiro的一切的缓存操作都与这

浪子 1万+

pikachu靶场: 暴力破解第四关(token防爆破)

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 同时将此 Token 返回给客户端。此外,Token 是有时效的,一段时间之后或下一次请求时用户需要重新验证。

X_shiguang的博客 1720

Shiro缓存管理器EhCacheManager的使用方法

Shiro缓存可以用来临时缓存权限信息,这样就不用每一次权限信息认证的时候都去数据库查询,可以打打提高效率 1.ShiroConfig类中声明缓存管理器对象EhCacheManager 2.给DefaultWebSecurityManager安全管理器对象注入EhCacheManager @Configuration//替代xml文件 public class ShiroConfiguration { //缓存管理对象 @Bean public EhCacheManager getEhCac

TheWayForDream 2171

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 820

Android Camera Sensor HDR详解

本文详细介绍了Android相机传感器(Sensor)中实现高动态范围(HDR)采集的各种技术方式。主要内容包括: Sensor HDR技术分类 帧内HDR(Single-Frame HDR):在同一帧同一像素内完成多增益采集,无运动伪影和帧率损失,包括DAG(双模拟增益)、DCG(双转换增益)等技术 帧间HDR(Multi-Frame HDR):通过多帧曝光实现,如DOL(数字重叠)、Staggered HDR等 混合HDR:结合多种技术的复合方案 详细技术原理 重点解析了DAG和DCG两种主流帧内HDR

DU_YULIN的博客 358

springboot集成shiro(Ehcache和Redis缓存)

shiro中结合Ehcache缓存 Ehcache已经帮我们自动实现了shiro的CacheManager接口 //权限缓存到内存 @Bean(name = "shiroRealm") public Realm getRealm() { MyShiroRealm myShiroRealm = new MyShiroRealm(); //修改凭证匹配器 HashedCredentialsMatcher hashedCredentialsMatcher =

qq_42298793的博客 755

一句话看懂 vibing-steampunk

摘要: vibing-steampunk(vsp)是一个连接SAP ABAP开发工具(ADT)与AI编码代理(如Claude、GitHub Copilot)的桥梁,通过MCP协议实现自动化代码读写、调试和部署。它利用ADT API直接访问SAP系统,绕过传统GUI操作,支持ECC和S/4HANA等环境。工具提供包分析、依赖检查、LUW行为识别等功能,显著提升ABAP项目维护效率。其创新Hyperfocused模式和方法级编辑大幅降低token消耗,而上下文压缩技术则优化了AI对ABAP代码的理解能力,特别适

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 114

springboot+shiro+ehcache整合之Another unnamed CacheManager already exists in the same VM.

ehcache.xml配置文件 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" ...

Masli的博客 2789

MFC 中实现 WebSocket 客户端以支持实时双向通信

3. **协议兼容**:若服务器使用 `wss://`(加密),需在 `lws_client_connect_info` 中配置 SSL 相关参数(`ssl_connection = LCCSCF_USE_SSL`)。- 编辑框(`m_editUrl`):输入 WebSocket 服务器地址(如 `ws://echo.websocket.events`)。2. 将编译后的库文件(`.lib`、`.dll`)和头文件路径添加到 MFC 项目中(项目属性 -> VC++ 目录)。// UI:服务器地址。

寒寒豆豆软件公司的博客 202

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

springboot下 shiro使用ehcache和@cacheable冲突的处理

springboot提供缓存注解标签 @Cacheable ,当使用ehcache时,autoconfig机制会根据配置文件自动去初始化bean 而shiroConfig在@Configuration构造时,也会去初始化ehcache ,项目启动会产生如下异常 org.apache.sh...

chubinju9027的博客 693

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Shiro整合SpringBoot缓存实战:Ehcache与Redis选型及JSP权限优化

在权限管理系统中,Shiro作为轻量级安全框架,其授权缓存机制常被忽视,导致频繁数据库查询。理解认证与授权缓存的区别、缓存key生成原理,是优化性能的基础。通过合理配置CacheManager,可显著提升权限校验效率,降低数据库压力。常见方案包括Ehcache、Redis及本地Map,分别适用于单机、分布式及测试场景。在SpringBoot项目中,结合JSP页面权限标签,缓存能有效加速页面渲染。本文围绕Shiro缓存整合,深入探讨选型、配置、一致性及命中率优化,帮助开发者构建高效权限系统。

weixin_31188927的博客 114

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ehcache 冲突_springboot下 shiro使用ehcache和@cacheable冲突的处理

springboot提供缓存注解标签@Cacheable ,当使用ehcache时,autoconfig机制会根据配置文件自动去初始化bean而shiroConfig在@Configuration构造时,也会去初始化ehcache ,项目启动会产生如下异常org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: An...

weixin_39688856的博客 754

springboot2.0 + shiro + ehcache整合之解决多缓存管理器被创建的问题(只能创建一个缓存管理器)

springboot2.0 +shiro + ehcache整合 一:依赖包: (1) shiro 与 spring 整合的依赖: &lt;dependency&gt; &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt; &lt;artifactId&gt;shiro-spring&lt;/artifactId&gt; &...

jialijuan521_zhang的博客 1647

springboot②最正确的集成shiro并使用ehcache缓存

  springboot集成shiro和ehcache的时候,要先集成ehcache然后再集成shiro,这样当shiro配置cacheManager的时候就可以直接使用了。下面是正确的集成步骤: 第一步集成ehcache: 1.在pom.xml文件中引入以下依赖 &lt;!--开启 cache 缓存--&gt; &lt;dependency&gt; ...

tanleijin的博客 3万+

SpringBoot+Shiro正确配置缓存

SpringBoot+Shiro正确配置缓存 近期在开发cms系统过程中发现 springboot 配置shiro后验证权限会一直查询数据库,增加数据库负担,网上查了很多资料,基本都是错误的 错误一: 调用的shiro包中的默认ehcache.xml 配置不能自定义 错误二: 和srping中的ehcache 重名 产生冲突 一个jvm中 只能有一个 ehcache 命名不得重名 ehcache ...

东哥他爸的博客 1377

使用CacheManager进行缓存授权

一.说明 1.Cache说明 Cache缓存:计算机内存中一段数据。 2.Cache作用 作用:用来减轻DB的访问压力,从而提高系统的查询效率。 3.流程 二.使用默认缓存 1.导入依赖 <!-- 引入echcache缓存技术 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> &

qq_45421186的博客 888

SpringBoot中整合Redis、Ehcache使用配置切换 并且整合到Shiro中

在SpringBoot中Shiro缓存使用Redis、Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器。 让shiro引用 本文是建立在你是使用这shiro基础之上的补充内容 第一种:Redis缓存,将数据存储到redis 并且开启session存入redis中。 引入pom <dependency> &...

云扬四海的博客 806

shiro空指针_Shiro CacheManager获取异常,空指针

报错摘要:Caused by: java.lang.NullPointerException: nullassertNoCacheManagerExistsWithSameName源码摘要内容:final String msg = "Another "+ (isNamed ? "CacheManager with same name '" + name + "'" : "unnamed Cache...

weixin_42300302的博客 632

【Shiro第六篇】SpringBoot + Shiro集成缓存功能

一、概述 Shiro 提供了类似于 Spring 的 Cache 抽象,即 Shiro 本身不实现 Cache,但是对 Cache 进行了又抽象,方便更换不同的底层 Cache 实现。 Shiro 提供的 Cache 接口: public interface Cache<K, V> { //根据Key获取缓存中的值 public V get(K key) throws CacheException; //往缓存中放入key-value,返回缓存中之前的值

weixiaohuai的博客 1596

Shiro学习笔记_03:整合SpringBoot项目实战

Shiro 学习笔记 本文基于B站UP主【编程不良人】视频教程【2020最新版Shiro教程,整合SpringBoot项目实战教程】进行整理记录,仅用于个人学习交流使用。 视频链接:https://www.bilibili.com/video/BV1uz4y197Zm 官方文档:http://www.baizhiedu.xin 目录标题 Shiro 学习笔记 六、整合SpringBoot项目实战 6.1 整合思路 6.2 配置环境 6.3 简单使用 6.4 常见过滤器 6.5 认证和退出实现

m0_67393342的博客 236
上一篇: Shiro安全框架(Shiro与SpringBoot整合开发)授权部分(三)权限实现
下一篇: Shiro安全框架(Shiro与SpringBoot整合开发)缓存(五)Shiro缓存实现(redis缓存)
JavaJieRui
博客等级 码龄7年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值