Shiro安全框架(Shiro与SpringBoot整合开发)缓存(五)Shiro缓存实现(redis缓存)

SpringBoot之整合Shiro(最详细) pom.xml 2.3 创建前端页面 在webapp文件夹中创建index.jsp和login.jsp index.jsp login.jsp 2.4 配置视图信息 application.properties 2.5 解决IDEA冲突问题 JSP 与IDEA 与SpringBoot存在一定的不兼容,修改此配置即可解决 pom.xml 3.2 自定义Realm 在shiro文件夹下创建realm文件夹 3.3 Shiro配置 在config文件夹中创建ShiroConfig.java 3.4 启动测试 输入 阅读详情

这篇文章我们接上回的shiro自带缓存ehcahe cacheManager的实现,但是暴露了一个小问题是程序一结束缓存就会消失,所以此时我们就用redis做缓存,解决这个问题。

首先我们将redis的坐标引进来到POM文件中:

        <!--redis整合springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

之后redis安装、启动等操作不是本篇文章的重点则不做赘述,接着我们在springboot的配置文件中配置redis的信息:

spring.redis.port=6379
spring.redis.host=localhost
spring.redis.database=1

上面的配置声明了redis的端口号,ip为我的本机,用到的redis的库为1号库,因为我的0号库中存储着一些其他数据,所以将库指定为了1号库。

而此时,我们要将redis引入我们的项目用到它其实可以参照我们用shiro自带的接口的ehmanager的缓存实现。

首先我们之前在ShiroConfig文件中做了ehCache的缓存实现,我们则可以将他改为我们自己的redis的缓存实现:

/**
 * 自定义shiro缓存管理器
 */
public class RedisCacheManager implements CacheManager {
    /**
     *
     * @param cacheName 认证或缓存的统一名称
     * @param <K>
     * @param <V>
     * @return
     * @throws CacheException
     */
    @Override
    public <K, V> Cache<K, V> getCache(String cacheName) throws CacheException {
        RedisCache<K,V> redisCache = new RedisCache<>(cacheName);
        return redisCache;
    }
}

之前我们看到过shiro的自带缓存用到缓存管理器,此时我们要自定义缓存管理器则一定要实现CacheManager这个接口,这个方法中有一个参数为cacheName这个就是认证或授权的缓存统一名称。可以看到我在上面这段代码中新new了一个对象RedisCache<K,V>这个则是我们自定义Redis缓存实现的类,用缓存管理器来管理我们的自定义Redis缓存实现。下面可以看一下这个类:

/**
 * 自定义RedisCache缓存的实现
 */
public class RedisCache<K,V> implements Cache<K,V> {

    private String cacheName;

    public RedisCache(String cacheName) {
        this.cacheName = cacheName;
    }

    public RedisCache() {
    }

    private RedisTemplate getRedisTemplate(){
        RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

    /**
     *
     * @param k 根据key拿v
     * @return
     * @throws CacheException
     */
    @Override
    public V get(K k) throws CacheException {
        V v = (V)getRedisTemplate().opsForHash().get(this.cacheName, k.toString());
        return v;
    }

    /**
     *
     * @param k 将k,v放入Redis中
     * @param v
     * @return
     * @throws CacheException
     */
    @Override
    public V put(K k, V v) throws CacheException {
        getRedisTemplate().opsForHash().put(this.cacheName,k.toString(),v);
        return null;
    }

    /**
     * 移除指定的k
     * @param k
     * @return
     * @throws CacheException
     */
    @Override
    public V remove(K k) throws CacheException {
        return (V)getRedisTemplate().opsForHash().delete(this.cacheName, k.toString());
    }

    /**
     * 根据cachename清除整个map
     * @throws CacheException
     */
    @Override
    public void clear() throws CacheException {
        getRedisTemplate().delete(this.cacheName);
    }

    /**
     * 计算整个认证和授权的数量,key的总条数
     * @return
     */
    @Override
    public int size() {
        return getRedisTemplate().opsForHash().size(this.cacheName).intValue();
    }

    /**
     * 获取Keys
     * @return
     */
    @Override
    public Set<K> keys() {
        return getRedisTemplate().opsForHash().keys(this.cacheName);
    }

    /**
     * 获取values
     * @return
     */
    @Override
    public Collection<V> values() {
        return getRedisTemplate().opsForHash().values(this.cacheName);
    }
}

可以看到上面这段代码实现了Cache<K,V>这个接口,并重写了这些方法,这些方法都是我们用来操作数据库中数据到redis和操作Redis中数据的方法。因为我们用到了redis,配置了redis信息,引入了redis坐标,springboot就为我们初始化了一个RedisTemplate对象来让我们操作redis,而RedisTemplate这个对象不是被工厂管理的,所以我们要用到之前我们写的取spring容器中的对象的那个方法。getApplicationContextUtils这个方法使用RedisTemplate。

这时,Redis的存储效果如下:

再登录时就会发现控制台没有任何打印

但是退出登录,logout之后登录信息就会从redis中去除

Springboot2.x 整合shiro JWT redis 前后端分离 前言 原文地址:Springboot2.x 整合shiro JWT redis 前后端分离 如果你还对Shiro不太了解,请先看完上个教程:springboot2.x 整合shiro 本文整合shiro与JWT,其中数据库采用 用户->角色->权限 三层,JWT有token和refreshToken,其中refreshToken存储用的是redis,下面我们会一一介绍。 正文 流程 我... 阅读详情

相关推荐

SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存

发现问题,需找解决思路。之前我们整合Shiro,完成了登录认证和权限管理的实现,登录认证没什么说的,需要实现AuthorizingRealm中的doGetAuthenticationInfo方法进行认证,但是我们在实现doGetAuthorizationInfo权限控制这个方法的时候发现以下两个问题: 第一个问题:我们在ShiroConfig中配置链接权限的时候,每次只要有一个新的链接,或则权限需要

qq_20954959的博客 1万+

SpringBoot结合Shiro实现redis缓存序列化问题

no valid constructor,这个错误是反序列化导致的,第一次正常登录的时候是shiro缓存序列化后存入到redis里,第二次登录账号从redis里取shiro缓存信息时不能反序列化取出缓存,就出这个错误:no valid constructor要解决取缓存反序列化的问题,还是要实现ByteSource接口。把SimpleByteSource里面的全部方法和属性 复制到继承ByteSource接口的类上。2.替换随机盐转化 new MyBateSource(user.getSalt())

hhhhhh的博客 675

SpringBoot整合Shiro使用redis做缓存

1、添加依赖 <!--shiro依赖--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> &...

xk147258的博客 918

Shiro seesion-redis缓存填坑记录

发项目使用springboot单体应用,使用shiro进行权限控制出现问题,记录下: 框架:springboot+shiro;缓存使用redis,使用spring-session-redis进行token验证;通过fastjson进行类的序列化和反序列化 期望结果:在登录时使用shiro进行登录,将当前登录成功的seesion直接保存到redis中去,并进行权限控制; 存在问题: session保存到redis时出现反序列化异常:处理方案:在redis中可以看到该seesion保存数据内容:在第五.

qq_27619637的博客 2094

spring boot整合redis,实现shiro的CacheManager

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

牛奋lch 1万+

SpringBoot与Redis及Shiro整合实战演示

SpringBoot是Spring社区提供的一个开源框架,旨在简化Spring应用的创建和开发过程。它通过约定优于配置的原则,让开发者能够快速启动和运行Spring应用,同时提供了一组工具来简化Web应用、数据访问、安全性和消息传递等方面的配置。Apache Shiro是一个全面的Java/Java EE安全框架,提供了认证、授权、加密、会话管理等多种安全功能。它的核心架构包括Subject、SecurityManager、Realm和领域对象。Subject。

weixin_42596011的博客 1077

Shiro中使用reids作为缓存实现

7.Shiro中使用reids作为缓存实现 1.引入redis依赖 <!--redis整合springboot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.配置redis连接 spring.redi

liudachu的博客 388

SpringBoot整合Shiro与Redis的缓存与Session共享实践案例

SpringBoot是一种广泛使用的Java开发框架,其目的是为了简化Spring应用的初始搭建以及开发过程。通过约定优于配置的原则,SpringBoot为开发者提供了一种快速构建项目的捷径,特别是对于那些刚刚踏入IT行业的新手而言,它能够帮助他们快速上手,高效完成项目开发。SpringBoot的核心优势在于自动配置、独立运行、内嵌服务器、无代码生成和无需配置XML。在SpringBoot环境中集成Shiro,通常可以利用SpringBoot的自动配置功能来简化Shiro的集成。

weixin_42466723的博客 1071

Spring Boot + shiro 去除Redis缓存

Spring Boot + shiro 去除Redis缓存

雨陆聪辰的博客 1944

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

H3C-V7防火墙配置SSL VPN IP资源典型案例(华三)

H3C-V7防火墙配置SSL VPN IP资源典型案例(华三)

m0_68265458的博客 5163

shiro使用redis实现cache管理

shiro使用redis实现cache Shiro默认整合了EhCache,来实现缓存,如果我们想用redis替换EhCache来实现缓存怎么做了?我们可以从Shiro的源码来找到一些端倪。 参考代码 https://github.com/gemingyi/shiro_demo 先找到shiro realm类的setCacheManager()方法,可以看到传入参数CacheManage...

baidu_33969289的博客 3842

IEC61850客户端连接实战:CMS vs MMS协议抓包对比与性能初探(基于YX-PIS协议栈)

本文深入探讨了IEC61850客户端连接中CMS与MMS协议的抓包对比与性能优化。通过Wireshark抓包分析、协议栈配置实战和性能基准测试,揭示了两种协议在连接建立、数据交互和性能调优方面的关键差异,为智能电网自动化系统的协议选择提供了实用指南。

weixin_29209805的博客 215

SpringBoot + Redis + Shiro + JWT单点登录主流安全框架

SpringBoot集成Redis、Shiro、JWT

欢迎。 2675

python毕设 基于Web的中药材信息查询系统程序+论文

***(程序+源码+数据库+调试部署+开发环境)论文文档1,文末可获取,系统界面在最后面。****

m0_74825541的博客 1257

保姆级教程:用Docker Compose在Linux上一键部署Milvus 2.5.8(附配置文件详解)

本文提供了一份详细的Milvus 2.5.8安装指南,通过Docker Compose在Linux系统上一键部署这款高性能向量数据库。教程涵盖环境准备、配置文件解析、服务启动验证及常见问题解决,帮助开发者快速搭建AI应用所需的基础设施。

weixin_28829629的博客 269

Shiro实战系列--整合shiro-redis

本文用实例介绍shiro通过引入shiro-redis来缓存权限。使用SpringBoot整合Shiro。

IT利刃出鞘的博客 1万+

R语言分布式滞后非线性模型DLNM实战:空气污染与健康数据的动态效应可视化与政策启示

本文详细介绍了R语言中分布式滞后非线性模型(DLNM)的应用,特别关注空气污染与健康数据的动态效应可视化。通过dlnm包实现PM2.5等污染物的滞后效应分析,提供从数据预处理、模型构建到结果可视化的完整流程,并探讨了其在公共卫生政策制定中的实际应用价值。

weixin_29079643的博客 514

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 认证和退出实现6.5.1 登录实现6.5

耿鬼不会笑的博客 1万+

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7237

【报错解决】OpenClaw 报错 FetchError: request to [https://registry.npmjs.org/](https://registry.npmjs.or

在国产基础软件与云原生生态逐步成熟的背景下,越来越多的开发者开始尝试将 Web 前端、AI 推理、系统服务等组件部署到国产操作系统与国产云环境中。我所在的项目正是这样一个场景: 我们基于 OpenClaw 构建一套云端 AI 管理平台,用于统一管理模型服务、前端控制台与后台 API。

博客 1753

【SpringBoot整合系列】SpringBoot整合Shiro——权限控制

SpringBoot整合Shiro权限控制

低调做人,低调编码,神码都是浮云 2452

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SpringBoot+Shiro+Redis+Mybatis-plus 实战项目

文章目录前言技术栈需求分析数据库E-R图设计数据库脚本Shiro 与 Redis 整合学习总结核心Mapper文件项目完整代码(CodeChina平台)项目运行踩过的坑归纳总结 前言 最近也是一直在保持学习课外拓展技术,所以想自己做一个简单小项目,于是就有了这个快速上手 Shiro 和 Redis 的小项目,说白了就是拿来练手调调 API,然后做完后拿来总结的小项目,完整的源代码已经上传到 CodeChina平台上,文末有仓库链接???? 技术栈 前端   html  

jmu201821122110 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

shiro学习笔记:springboot整合shiro,并使用redis缓存

springboot单体应用,整合shiro,用来做权限管理,并加上redis缓存机制

zifengye520的专栏 5541

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

springboot2.0+shiro整合使用redis缓存

最近自己搭建了个springboot2.x整合shiro框架使用Redis缓存的环境,以后可能会用得上,特意保存记录下来。 首先是必要的一些依赖 代码<?xml version="1.0" encoding="UTF-8"?> 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE co...

Halo333的博客 2504
上一篇: Shiro安全框架(Shiro与SpringBoot整合开发)CacheManager(四)Shiro缓存实现(ehCache自带缓存)
下一篇: Shiro安全框架(Shiro与SpringBoot整合开发)之图片验证码(五)
JavaJieRui
博客等级 码龄7年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值