系列文章目录


文章目录

  • 系列文章目录
    • 使用springSession完成分布式session

使用springSession完成分布式session

原文链接 https://zhhll.icu/2021/框架/springmvc/分布式session/使用springSession完成分布式session/

分布式session可以使用spring session来进行实现,由于HttpRequest的Wrapper功能,许多HttpRequest中的方法都可以进行替换来进行自定义的重写,所以可以将getSession方法重写掉,然后进行自定义的session存储和处理,当然了,你能想到的,一般都是早就有人已经实现了,就不重复造轮子了

spring session已经实现出了上述功能,只需要进行配置就可以实现啦

这里演示的是将session存储在redis中,所需要的依赖

        <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId><version>1.3.5.RELEASE</version></dependency><dependency><groupId>biz.paluch.redis</groupId><artifactId>lettuce</artifactId><version>3.4.2.Final</version></dependency>

在spring的配置文件中配置

<!-- 测试spring-sessionhttpSession存储在redis-->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<!-- redis的连接工厂 -->
<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"><constructor-arg name="host" value="localhost"/><constructor-arg name="port" value="6379"/>
</bean>

当然只是配置这个是不够的,RedisHttpSessionConfiguration中根本就没有提到HttpServletRequestWrapper呀,当然还要配置配置一个过滤器

<!-- filter的名字不要改变,这个DelegatingFilterProxy类是根据名字去加载bean的 -->
<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><dispatcher>REQUEST</dispatcher><dispatcher>ERROR</dispatcher>
</filter-mapping>

为什么要使用DelegatingFilterProxy,而不直接去使用springSessionRepositoryFilter呢?因为springSessionRepositoryFilter没有默认构造器,需要传入参数sessionRepository,而这个sessionRepository是spring管理的一个bean,那就只好也将springSessionRepositoryFilter作为一个bean去处理吧,所以就使用DelegatingFilterProxy,它的功能就是会从spring上下文中去查找

启动项目之后正常的向往常一样的操作session,就可以看到redis中存有session了

127.0.0.1:6379> keys *
1) "spring:session:expirations:1623743940000"
2) "spring:session:sessions:3fbe4ab6-b9ff-4065-8c07-b0ed7f02a4db"
3) "spring:session:sessions:expires:3fbe4ab6-b9ff-4065-8c07-b0ed7f02a4db"

使用springSession完成分布式session相关推荐

  1. SpringSession实现分布式Session

    基于Redis存储Session的实现流程图如下所示: 1. 引入相关依赖 <!--spring data redis 依赖--><dependency><groupId ...

  2. SpringBoot实现分布式session

    实现分布式session 为什么要实现分布式session session 我们都知道它是保存在服务器的,当我们的项目做了负载均衡,如果在session中存了数据(用户登录的信息等等数据),那么就有可 ...

  3. redisson集成spring-session和shiro实现分布式session

    一.pom <!-- Shiro权限验证 --><dependency><groupId>org.apache.shiro</groupId><a ...

  4. spring+redis自主实现分布式session(非spring-session方式)

    为什么80%的码农都做不了架构师?>>>    背景:最近对一个老项目进行改造,使其支持多机部署,其中最关键的一点就是实现多机session共享.项目有多老呢,jdk版本是1.6,s ...

  5. SpringSession+redis解决分布式session不一致性问题

    七.案例实战:SpringSession+redis解决分布式session不一致性问题 步骤1:加入SpringSession.redis的依赖包 <dependency><gro ...

  6. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  7. 分布式Session分析与代码实战(SpringSession)

    一.介绍 1.什么是session? cookie? session对象存储在服务器端内存中,cookie存储在客户端浏览器中.一般是客户端请求服务器,服务器端生成session对象,将session ...

  8. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  9. 使用Spring Session和Redis解决分布式Session跨域共享问题

    大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...

最新文章

  1. 在windows上搭建Apache+Trac+Subversion
  2. qt 一个线程接收数据 主线程更新界面 会造成界面退出 怎么解决_打造一个好产品...
  3. spring aop示例_具有AOP事务管理的Spring ORM示例
  4. 预付费客户抄表管理系统的应用
  5. 用eXeScope个性化自己的Win7
  6. 【博弈论】耶鲁大学公开课--博弈论Problem Set 1--Solution
  7. CentOS 官网下载 iso 镜像
  8. Python基础语法——基础语法、变量
  9. c语言实验报告中致谢词,实验报告致谢词范文
  10. 【Flutter实战】定位装饰权重组件及柱状图案例
  11. 技术点:vue3 使用 ref 绑定 router-view,想调取某个子路由中的方法来重载数据
  12. 织梦主动提交_织梦CMS网站如何自动提交百度快速收录(详细教程)
  13. Cobar Client的使用
  14. ML入门20220706
  15. 论文解读 | Fusing wearable imus with multi-view images for human pose estimation: A geometric approach
  16. 一个简单的文本聚类实现(python)
  17. 内控遇到的问题及解决方法
  18. 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)
  19. Java开发常用的Linux命令
  20. 第三代计算机 ibm360,IBM System/360诞生44周年

热门文章

  1. 写文案,是责任与担当
  2. python银行账户资金交易管理_python 实现网上商城,转账,存取款等功能的信用卡系统...
  3. Portfolio与Program的区别;PM/Project与PMO的区别
  4. CentOS7.3临时与永久挂载硬盘
  5. BETWEEN AND的边界值问题
  6. java架构学习——5. 线程池原理剖析锁的深度化
  7. 『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步
  8. c语言中在按回车键继续的这句话后面大什么程序可移执行,2018年C语言程序设计期末考试试题及其答案...
  9. 用CD74HC4067高速模拟开关模块实现16路流水灯控制(Arduino UNO)
  10. 09-MySQL reids