Spring Session Data Redis 配置中遇到的坑

spring-session-data-redis核心原理 本文介绍了分布式Session的实现原理及配置方法。Session通过在服务器端保存用户登录信息,使用sessionId进行鉴权。在微服务架构中,通过Redis实现分布式Session共享。核心配置使用@EnableRedisHttpSession注解,可设置过期时间、命名空间等参数。RedisHttpSessionConfiguration类负责读取配置并创建RedisIndexedSessionRepository来管理Session操作。通过引入相关依赖和配置,可实现跨服务的Session共享,解决分 阅读详情
AI摘要

本文详细介绍了如何使用Spring Session Data Redis实现Session共享,包括配置步骤、常见问题及解决方案。特别关注了版本兼容性和静态资源访问配置。

说道Session共享,从网上搜索,有几种实现方式,比较普遍的 Tomcat Session Redis,这种是需要在tomcat容器里增加几个jar包,并修改Tomcat里的content.xml增加一条语句,实现session共享,此方法依赖于 tomcat.
还有一种是 Spring-Session-Data-Redis,此方法对servlet容器都有效,不局限于tomcat,也是比较普遍的一种方法,具体可自行百度了解
今天要说的是在配置SpringSessionDataRedis过程中遇到的坑
基本配置方式也比较简单
第一步:pom.xml中引入依赖
首先要引入依赖,此依赖并不是jar,而是一个空包里面还有对spring-session,redis等几个必要组件的依赖
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>1.3.1.RELEASE </version>
</dependency>
注意:此地方有一个比较坑爹地方,当打开Maven仓库,可以看到有一个对Spring版本的依赖的要求,对于1.3.1的SpringSession,对Spring的依赖最低4.3.4,如果依赖低于这个版本,则会报错Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.session.SessionRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}, 特别注意,引入不同的版本时,可能会引起原有jar包版本不兼容
第二步:Spring-mvc.xml中增加 redisHttpSessionConfiguration
    <!-- Spring Session Redis 共享 http://www.cnblogs.com/andyfengzp/p/6434287.html -->
     <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <property name="maxInactiveIntervalInSeconds" value="1800"/>
    </bean>
注意:由于使用了这里的配置,由redis负责接管Session,原来web.xml里配置的Session超时时间就会失效了
    <session-config>
        <session-timeout>60</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
        </cookie-config>
    </session-config>

第三步:Web.xml中配置filter

    <!-- Spring Session Redis 共享 需要放在filter的第一个  http://www.cnblogs.com/andyfengzp/p/6434287.html -->
    <filter>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
注意:这个filter要写在比较靠前的第一个的位置

以上这几步配置完成后,基本就可以实现Session的共享了。
但是这里还有一个情况,项目启动后,左右的静态资源都无法访问了,这个是和原来的版本有不一样的地方,
Spring4.3,这里需要注意,所有Spring的xml的配置文件里标签要变为  -4.3.xsd
<!-- 静态文件资源访问配置 --> 要注意这里的静态文件不要放到WEB-INF里,要放到项目内,例如项目下的resources
<mvc:resources mapping="/**" location="/resources/" />这样就可以放行静态文件的访问


还有一个比较大的坑,使用Spring Session实际是Spring加入了一个Filter,其本质是:对每一个请求的request都会被DelegatingFilterProxy进行了一次封装。那么,在Controller里面拿出的request实际上是封装后的request,因为Session要存在Session,所以调用request.getSession()的时候,实际上拿到是Spring封装后的session ,因此对于request实际上拿到是Spring封装后的request。那么可能会导致Request.getInputStream无法获取到流数据,对于使用raw格式,即非Key,Value参数的提交 会被Spring-Session获取, 当 contentType 为 application/x-www-form-urlencoded 时,就会被解析成 Paramater ,从而导致request.getInputStream的数据再获取时为空了。还有就是Controller里如果用到了request.setCharacterEncoding("GBK"); 设置字符集,这样的请求也无法生效,因为request.setCharacterEncoding只有在request.getSession或者request.getParamater之前使用有效,而由于使用Spring Session加入了filter,所以Controller里的request.setCharacterEncoding这种方式转编码就失效了,解决办法,可以是new String(request.getParameter(key).getBytes(), "GBK"),获取到参数后转码

相关连接





Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享 由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升, 阅读详情

相关推荐

springboot2.0 session存储到redis整合过程中踩倒的坑

之前一直用的是springboot1.5 在使用session整合到redis时 按照一些博客上的教程没有问题 但是这次采用的是springboot2.0的版本,把以前老项目的一些东西直接复制粘贴过来 pom.xml依赖如下 <dependency> <groupId>org.springframework.boot</groupId> ...

weixin_43706845的博客 3506

分布式Session(Spring-session-data-redis)

1、在pom中添加如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency>

Emm_Sona的博客 3719

别再搞混了!Redis、Jedis、Lettuce、Spring Data Redis、Redisson、Spring Session Redis 一次讲透

平时做Java开发,只要引入Redis做缓存,pom.xml里总会看到一堆名字相似的东西:一会儿是jedis,一会儿是lettuce,还有Spring Data Redis、Redisson、Spring Session Redis……刚接触的时候真的头大,甚至会把Redis服务端和Java客户端混为一谈,踩了不少坑。今天就把这些东西理清楚,分清谁是底层、谁是封装、谁是专门解决某个场景的。

博客 614

spring-session-data-redis

spring-session-data-redis引入依赖添加配置使用 引入依赖 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <gro

qq_45134546的博客 2139

spring-session-data-redis-2.0.4.RELEASE-API文档-中英对照版.zip

赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-session-data-redis-2.0.4.RELEASE.pom; 包含翻译后的API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.session:spring-session-data-redis:2.0.4.RELEASE; 标签:springframework、session、spring、data、redis、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文

【JS】自定义上传组件,文件上传与回显,自定义进度条显示(基于element-plus与axios)

公司是做B 端产品的,有sass平台也有源码交付的项目,最近开发了很多小系统,这里记录一下开发遇到的问题。 需要定制一个上传组件,要求可以自定义文件存储路径,自定义可上传的文件类型,限制文件大小等,并且提供基础的文件回显功能,例如上传一张图片到服务器指定目录的`/file`文件夹下面,并且实现可以查看预览的功能。

余浩的博客 1161

Spring Boot分布式部署Session共享实战:用Redis解决多实例会话丢失问题

在微服务与多实例部署架构下,HTTP Session默认存储在Web容器本地内存,当负载均衡将请求分发到不同节点时,用户登录状态极易丢失。Session共享的本质是将会话数据从各节点内存抽离至统一存储层,而Redis凭借内存高速读写、Key过期机制等特性,成为实现分布式会话管理的首选方案。本文从Session丢失的根因出发,对比Spring Session Data Redis、Tomcat Session Manager与Cookie-Based Session三条技术路线,并基于Spring Boot给

weixin_31155097的博客 208

YOLOv11与3D点云检测融合技术深度解析:从2D检测到三维空间投影的完整实现

2D-3D融合目标检测技术研究 本文系统阐述了基于YOLOv11的2D-3D目标检测融合技术,重点分析了YOLOv11在融合系统中的定位优势及其架构设计。研究表明,2D图像与3D点云数据具有显著的互补特性:2D图像提供丰富语义信息,而3D点云则精确描述几何结构。 关键技术要点: YOLOv11通过GSConv平衡卷积和VoVGSCS特征融合模块,在保持实时性的同时提升了检测精度 系统采用模块化设计,包含坐标投影、点云分割、边界框拟合等核心组件 针对点云数据的非均匀分布特性,提出了多尺度特征增强和距离差异化检

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1126

使用spring-session-data-redis实现HTTP Session集中管理原理

在使用spring-session-data-redis时只需要在@Configuration类上加上@EnableSpringHttpSession即可实现使用Redis集中存储Session。将此批注添加到@Configuration类,以将SessionRepositoryFilter公开为名为“springSessionRepositoryFilter”的bean,并由用户提供的Sessi...

通往神秘的道路的专栏 2万+

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3825

YOLOv8/v9轻量化优化:剪枝30%+蒸馏提精,模型体积缩至4MB还能跑Jetson

剪枝:用敏感度分析找到“可牺牲的30%”,不碰核心特征;蒸馏:借大模型的“经验”补回精度,甚至反超原始小模型;量化:针对边缘设备特性优化量化策略,把体积和延迟压到最低。如果你的项目卡在边缘部署(速度慢/体积大),按“剪枝→蒸馏→量化”三步走,90%能在Jetson上跑通30FPS+的实时检测。需要轻量化模型文件(v8s/v9s剪枝蒸馏后权重)、剪枝工具和Jetson部署脚本的,评论区扣“轻量化”,直接发你可运行版本~

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 669

【SpringBoot框架篇】19.集成spring-session利用redis来实现session共享

集成spring-session利用redis来实现session共享

皓亮君的博客 3600

【思博伦】史上最详细Spirent TestCenter测试仪使用教程精讲(一)!图解超赞超详细!!!

3. 在弹出的界面中,找到菜单栏中的“Connect/Create”,选择下拉框中的“Connect to Physical/Visual Chassis”,在弹出的对话框中输入思博伦测试仪的IP地址:192.168.6.244,点击“OK”;说明:目前我们只需要使用到Raw Stream Block,不需要用到Bound Stream Block。说明:如果要使用100G模式,由于硬件限制,必须连续3个面板端口同时配置为100G使用。打开安装包,并按照提示按照即可。

风云说通信 6477

Session(Spring-session-data-redis)

https://www.jianshu.com/p/97c714e2ca7d 1、在pom中添加如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependenc.

qq_27088383的博客 3511

芒果YOLO11改进59:分类损失函数Loss篇FocalLoss:即插即用|最新改进FocalLoss损失函数,提高处理不平衡数据分类场景下的任务性能,提升YOLO11检测精度

即插即用|最新改进FocalLoss损失函数,提高处理不平衡数据分类场景下的任务性能,提升YOLO11检测精度

包括YOLOv5、YOLOv7、YOLOv8等模型改进 548

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 998

配置spring-security对redis中session的同步处理,通过sessionRegistry统计在线用户

问题描述: 登录用户的session在redis失效、清除或者用户退出系统后,系统中的sessionRegistry中session依然存在,并未同步失效 系统架构: Springboot2 + SpringSecurity + spring-session-data-redis + Redis 1. Redis配置(当然可以只加注解,使用默认配置) /** redis配置 */ @Confi...

Janche的博客 8719

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 730

spring-session-data-redis升级之坑

因为某些组件低版本存在漏洞问题,本次对项目的springboot版本从1.x升级到了2.x,因为其他相关的中间件也随着一起升级,在升级最后发现项目用户信息无法获取到了。

weixin_39439156的博客 2037

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

spring boot2.x设置session有效时间_spring data redis集成以及session共享

redis 是一款基于内存存储的高性能缓存框架,支持多种数据结构如string, hash, list, set、sorted set、bitmap等多种数据类型,也提供了很多高可用功能如rdb和aof备份、哨兵模式和集群模式部署。redis有许多的应用场景,一般用于替代一些数据库访问热点数据操作减少数据库压力以及提高性能,也可用于session共享、排行榜等。redis是业内最流行的一款缓存框架...

weixin_30780735的博客 839

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

springboot 下 spring-session-data-redis + redis + nginx 实现session共享

1: pom引入依赖 <!-- spring boot 与 redis 应用的基本配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-...

tang_jian_dong的博客 5737

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

struts2+springsecurity+spring-session-data-redis使用redis存储session

springsecurity做权限验证,采用默认的session管理,在系统重新部署启动之后,之前登录的用户session无法被保存,需要用户重新登录,这里使用redis来做session存储,系统重启之后,session还在,无需重新登录。 使用redis做session存储,本身配置比较简单,但是这里和struts2结合,就需要注意。 springSessionRepositoryFilt...

feinifi的博客 2129

spring Boot redis连接池配置,Spring Session配置

1.POM配置 redis.clients jedis 2.9.0 org.springframework.session spring-session-data-redis 2.配置文件application.properties # REDIS (RedisProperties) # Redis数据库索引(默认为0) spr

yangliuhbhd的博客 2万+

Spring-session(spring-session-data-redis)实现分布式下Session共享

由于公司项目是单节点的,同事在开发过程中并未做Session共享,由于流量上升后,领导未经过了解直接加机器、加节点;大家可想而知了,项目中运行过程出现很多问题,经过同事们系列排查,才知道是由于上面原因导致拿不到Session。 大家在项目采用Spring-Session时一定要注意项目中Spring的版本,否则会给你带成很多坑,首先,Spring-Session所需的最低SPring版本是3.2...

ycb1689的专栏 5752

在spring 里面,spring-session 和 spring-session-data-redis 结合让项目平滑升级与redis 缓存的一些运用

之前每次升级的时候,还要停集群节点,然后升级以后再启动,需求需要不停机升级! 然后实现是用springsession 结合redis 做的缓存!引入jar  &lt;dependency&gt;            &lt;groupId&gt;org.springframework.session&lt;/groupId&gt;            &lt;artifactId&gt;spr...

bianmadetangyuan的博客 2953

springmvc框架下使用spring-session-data-redis集成redis实现session共享

1、安装redis 具体过程不再讲 2、配置redis bind 127.0.0.1 192.168.1.100 #指定redis绑定的主机地址 port 6379 #指定访问redis服务端的端口 timeout 1800 #指定客户端连接redis服务器时,当闲置的时间为多少(如1800秒)时,关闭连接。 这个很重要 如果不设置的话,redis连接数会越来越大,直到最大值后报异常 ...

lgklm的专栏 1790
上一篇: 使用zinin的RedisSession共享时报java.lang.ClassCastException转换错误的最终解决方案
下一篇: 关于用户访问请求慢,TTFB时间长的问题分析
幕紫
博客等级 码龄16年 56粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值