尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Spring Boot Shiro中使用缓存
一、前言在Shiro中加入缓存可以使权限相关操作尽可能快避免频繁访问数据库获取权限信息因为对于一个用户来说其权限在短时间内基本是不会变化的。Shiro提供了Cache的抽象其并没有直接提供相应的实现因为这已经超出了一个安全框架的范围。在Shiro中可以集成常用的缓存实现这里介绍基于Redis和Ehcache缓存的实现。在《Spring-Boot-shiro权限控制》中当用户访问”获取用户信息”、”新增用户”和”删除用户”的时候后台输出了三次打印信息如下所示用户wno704获取权限-----ShiroRealm.doGetAuthorizationInfo用户wno704获取权限-----ShiroRealm.doGetAuthorizationInfo用户wno704获取权限-----ShiroRealm.doGetAuthorizationInfo说明在这三次访问中Shiro都会从数据库中获取用户的权限信息通过Druid数据源SQL监控后台也可以证实这一点这对数据库来说是没必要的消耗。接下来使用缓存来解决这个问题。二、Redis缓存2.1 引入Redis依赖网络上已经有关于Shiro集成Redis的实现我们引入即可!-- https://mvnrepository.com/artifact/org.crazycake/shiro-redis --dependencygroupIdorg.crazycake/groupIdartifactIdshiro-redis/artifactIdversion3.3.1/version/dependency2.2 配置Redis我们在application.yml配置文件中加入Redis配置spring:redis:host:127.0.0.1port:10007password:jedis:pool:max-active:8max-wait:-1max-idle:8min-idle:0timeout:02.3 配置Redis接着在ShiroConfig中配置RedisValue(${spring.redis.host})privateStringredisHost;Value(${spring.redis.port})privateStringredisPost;Value(${spring.redis.timeout})privateintredisTimeout;Value(${spring.redis.password})privateStringredisPassword;publicRedisManagerredisManager(){RedisManagerredisManagernewRedisManager();redisManager.setHost(redisHost:redisPost);redisManager.setTimeout(redisTimeout);if(!(redisPasswordnull||redisPassword.equals())){redisManager.setPassword(redisPassword);}returnredisManager;}publicRedisCacheManagercacheManager(){RedisCacheManagerredisCacheManagernewRedisCacheManager();redisCacheManager.setRedisManager(redisManager());returnredisCacheManager;}2.4 注入RedisManager上面代码配置了RedisManager并将其注入到了RedisCacheManager中最后在SecurityManager中加入RedisCacheManagerBeanpublicSecurityManagersecurityManager(){DefaultWebSecurityManagersecurityManagernewDefaultWebSecurityManager();...securityManager.setCacheManager(cacheManager());returnsecurityManager;}2.5 测试配置完毕启动项目分别访问访问”获取用户信息”、”新增用户”和”删除用户”可发现后台只打印一次获取权限信息用户wno704获取权限-----ShiroRealm.doGetAuthorizationInfo查看Druid数据源SQL监控三、Ehcache3.1 Ehcache依赖!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-ehcache --dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-ehcache/artifactIdversion1.6.0/version/dependency3.2 Ehcache配置在src/main/resource/config路径下新增一个Ehcache配置——shiro-ehcache.xml?xml version1.0 encodingUTF-8?ehcachexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:noNamespaceSchemaLocationhttp://ehcache.org/ehcache.xsdupdateCheckfalsediskStorepathjava.io.tmpdir/Tmp_EhCache/defaultCachemaxElementsInMemory10000eternalfalsetimeToIdleSeconds120timeToLiveSeconds120overflowToDiskfalsediskPersistentfalsediskExpiryThreadIntervalSeconds120/!-- 登录记录缓存锁定1小时 --cachenamepasswordRetryCachemaxEntriesLocalHeap2000eternalfalsetimeToIdleSeconds3600timeToLiveSeconds0overflowToDiskfalsestatisticstrue//ehcache3.3 ShiroConfig配置Ehcache接着在ShiroConfig中注入Ehcache缓存BeanpublicEhCacheManagergetEhCacheManager(){EhCacheManageremnewEhCacheManager();em.setCacheManagerConfigFile(classpath:config/shiro-ehcache.xml);returnem;}3.4 注入EhCacheManager将缓存对象注入到SecurityManager中BeanpublicSecurityManagersecurityManager(){DefaultWebSecurityManagersecurityManagernewDefaultWebSecurityManager();securityManager.setRealm(shiroRealm());securityManager.setRememberMeManager(rememberMeManager());securityManager.setCacheManager(getEhCacheManager());returnsecurityManager;}3.5 测试配置完毕启动项目分别访问访问”获取用户信息”、”新增用户”和”删除用户”可发现后台只打印一次获取权限信息用户wno704获取权限-----ShiroRealm.doGetAuthorizationInfo查看Druid数据源SQL监控SQL只执行了一次说明缓存成功。
RELATED

相关推荐

无人机跌落故障链路分析与飞行日志排查实战指南

无人机跌落故障链路分析与飞行日志排查实战指南

无人机跌落是无人机开发、调试和日常飞行中最不愿遇到却又绕不开的问题。无论是自组四旋翼、PX4/ArduPilot 二次开发平台,还是行业巡检机型,升空后突然失去高度、姿态翻滚甚至直接坠地,都会造成设备损坏和现场风险。跌落看起来是一个瞬间现象…

📅 2026/10/7 13:29:59
无人机跌落系统性排查:从飞控日志到避障算法

无人机跌落系统性排查:从飞控日志到避障算法

无人机跌落是一个看起来简单、实际涉及飞控、动力、传感器、算法和操作经验的问题。很多新手遇到无人机跌落,第一反应是“飞控坏了”或者“风太大”。但如果你能打开飞行日志,会发现大部分跌落并不是毫无征兆的:电压曲线可能有突然下掉&#…

📅 2026/9/4 8:40:06
从恒生笔试题看开发岗基本功:并发、数据结构与底层能力

从恒生笔试题看开发岗基本功:并发、数据结构与底层能力

前几天整理旧资料,翻出一份恒生公司2015年秋招开发类的笔试题。10年前的笔试题放到今天看,很多考点依然眼熟——手写链表反转、String比较、SQL优化、Linux查日志。这年头大家张口闭口都是agent开发、AI应用开发,好像不会点新框架就不好意思投…

📅 2026/10/2 1:39:01
MORE NEWS

更多资讯

📰

Kubernetes Pod Not Found报错排查:命名空间、上下文与标签选择器实战

1. 这个报错到底在说什么:从一次真实的排查现场说起Error: Pods pod-name Not Found这个提示,几乎每个跟 Kubernetes 打过交道的人都见过。它不像 CrashLoopBackOff 那样有一堆日志可以翻,也不像 ImagePullBackOff 那样指向明确,它…

📰

PostgreSQL主从流复制与pgpool-II高可用部署实战

简介:PostgreSQL 主从流复制与 pgpool-II 高可用部署文档,面向数据库运维工程师与 DBA,解决主备数据实时同步、读写分离与主库故障自动切换的问题。内容从方案综述入手,讲清主库 WAL 日志经 walsender 推送至备库 walreceiver 落盘…

📰

Java数据结构与算法分析:递归、复杂度与链表指针精解

简介:面向使用《数据结构与算法分析(Java语言描述)》第三版的学生与自学者,这份习题答案文档可用于课后对照、期末复习及算法基础查漏补缺,适合正在巩固Java数据结构、递归思想和复杂度分析的读者。压缩包内仅含1个doc…

📰

高效调试方法论:从基础工具到AI辅助的BUG终结术

1. 项目概述:为什么我们需要"BUG终结者"?在软件开发领域,BUG就像影子一样伴随着每个程序员。我见过太多团队在调试上浪费的时间甚至超过实际开发时间。最近一个统计显示,开发者平均花费25%的工作时间在调试上&#xff0…

📰

Linux标准IO库:原理、优化与实战应用

1. 为什么标准IO在Linux编程中如此重要?在Linux系统编程中,输入输出(IO)操作是最基础也是最频繁的操作之一。标准IO库(stdio)作为C语言标准库的一部分,提供了一套高效、可移植的文件和终端操作接…

📰

跨平台扫码功能实现方案与技术解析

1. 项目概述扫码功能在现代移动应用中几乎成为标配,但不同平台的技术实现差异巨大。最近我在一个跨平台项目中,需要同时在常规H5页面、微信H5、微信小程序和原生App中实现扫码功能,踩了不少坑也积累了一些经验。本文将分享四种场景下的完整实…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬