看大佬程序员如何用spring boot 分布式session实现
1个回答
展开全部
分布式session实现通过包装HttpServletRequest代理session相关方法。
具体实现中,SessionRepositoryFilter过滤器包装HttpServletRequest对象,当调用session相关方法时,代理到SessionRepository实现类。
SessionRepository接口管理session,分布式方案需实现此接口。
SessionRepositoryFilter继承OncePerRequestFilter,控制每个filter只执行一次。
在doFilterInternal方法中,request和response包装,获取实际为SessionRepositoryRequestWrapper和SessionRepositoryResponseWrapper类型。
SessionRepositoryRequestWrapper内部类,实现获取session方法,如使用redis或数据库。
Redis实现分布式session只需配置redis连接信息,启动redis session相关功能。
配置导入RedisHttpSessionConfiguration类,实现session管理,创建RedisIndexedSessionRepository bean,实现SessionRepository接口。
SpringHttpSessionConfiguration通过注入RedisIndexedSessionRepository bean创建SessionRepositoryFilter过滤器。
实现分布式session方案通常类似,使用数据库或其他方式,需指定序列化实现,注入到defaultRedisSerializer属性。
通过指定序列化生成RedisSerializer类型bean,注入springSessionDefaultRedisSerializer,确保查看session时非乱码。
使用不同数据库需指定数据库类型和建表脚本,文档提供具体指南。
总结,通过代理HttpServletRequest方法和配置实现session管理,分布式session处理方案主要依赖SessionRepository接口和相关过滤器。
具体实现中,SessionRepositoryFilter过滤器包装HttpServletRequest对象,当调用session相关方法时,代理到SessionRepository实现类。
SessionRepository接口管理session,分布式方案需实现此接口。
SessionRepositoryFilter继承OncePerRequestFilter,控制每个filter只执行一次。
在doFilterInternal方法中,request和response包装,获取实际为SessionRepositoryRequestWrapper和SessionRepositoryResponseWrapper类型。
SessionRepositoryRequestWrapper内部类,实现获取session方法,如使用redis或数据库。
Redis实现分布式session只需配置redis连接信息,启动redis session相关功能。
配置导入RedisHttpSessionConfiguration类,实现session管理,创建RedisIndexedSessionRepository bean,实现SessionRepository接口。
SpringHttpSessionConfiguration通过注入RedisIndexedSessionRepository bean创建SessionRepositoryFilter过滤器。
实现分布式session方案通常类似,使用数据库或其他方式,需指定序列化实现,注入到defaultRedisSerializer属性。
通过指定序列化生成RedisSerializer类型bean,注入springSessionDefaultRedisSerializer,确保查看session时非乱码。
使用不同数据库需指定数据库类型和建表脚本,文档提供具体指南。
总结,通过代理HttpServletRequest方法和配置实现session管理,分布式session处理方案主要依赖SessionRepository接口和相关过滤器。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询