【Springboot】 Session共享

Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享 就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer!越努力越幸运!金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。 阅读详情

本文参考 Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

在传统的单服务架构中,只有一个服务器,那就不会存在session共享的问题,但如果在分布式/集群项目中,session共享则是一个必须面对的问题。

image.png

这样就会出现一个问题,比如说,当客户端发起了一个请求,这个请求到达Nginx之后,被转发到了服务器A,然后在服务器A上往session保存了一份数据,下次又来一个请求,这个请求被转发到 Tomcat B 上,此时再去 Session 中获取数据,发现没有之前的数据。对于这一类问题的解决,思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方(主流方案就是 Redis):

image.png

  • 当所有 Tomcat 需要往 Session 中写数据时,都往 Redis 中写,当所有 Tomcat 需要读数据时,都从 Redis 中读。这样,不同的服务就可以使用相同的 Session 数据了。

  • 这样的方案,可以由开发者手动实现,即手动往 Redis 中存储数据,手动从 Redis 中读取数据,相当于使用一些 Redis 客户端工具来实现这样的功能,毫无疑问,手动实现工作量还是蛮大的。

  • 一个简化的方案就是使用 Spring Session 来实现这一功能,Spring Session 就是使用 Spring 中的代理过滤器,将所有的 Session 操作拦截下来,自动的将数据 同步到 Redis 中,或者自动的从 Redis 中读取数据。

  • 对于开发者来说,所有关于 Session 同步的操作都是透明的,开发者使用 Spring Session,一旦配置完成后,具体的用法就像使用一个普通的 Session 一样。

#演示

##创建一个springboot项目

image.png

###依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--用于连接redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!--用于使用redis接管session-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--工具类,非必需-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.1.0</version>
        </dependency>

###application.yml

server:
  port: 8088
spring:
  redis:
    host: localhost
    port: 6379

###IndexController

@RestController
@RequestMapping(value = "/")
public class IndexController {

    @Value("${server.port}")
    private String port;
    private String username = "wangxianlin";
    private String password = "one_123";
    private String nickname = "Halo";


    @RequestMapping(value = "/login")
    public Map<String, Object> getSession(HttpServletRequest request,@RequestParam("user") String user,@RequestParam("pwd") String pwd) {
        Map<String, Object> map = new HashMap<>();
        if (username.equals(user) && password.equals(pwd)){
            request.getSession().setAttribute("user", "当前登录用户是:"+nickname);
            map.put("msg", "登录成功");
            map.put("port",port);
        }else {
            map.put("msg", "账号或密码错误");
        }
        return map;
    }

    @RequestMapping(value = "/get")
    public Map<String, Object> get(HttpServletRequest request) {
        Map<String, Object> map = new HashMap<>();
        String user = (String) request.getSession().getAttribute("user");
        map.put("msg", StrUtil.isEmpty(user)?"用户未登录":user);
        map.put("port",port);
        return map;
    }
}

在启动类上加上注解
@EnableRedisHttpSession

###将项目打成jar包
image.png

启动项目

前提:redis 是否已经开启?

将jar 分别以 8088和8089端口进行启动
java -jar --server.port=8088
java -jar --server.port=8089

8088

8089

###配置nginx

 upstream web-server { 
        server localhost:8088;  
        server localhost:8089;
    }

    server {
        listen       9000;
        server_name  localhost;
        location / {
            proxy_pass http://web-server;
        }
  }

###启动nginx

由于我这里有三个nginx配置文件,然后我想启动nginx-origanal.conf 咋办呢?
image.png

命令 人家早就给我们安排好了,我们只需要这样。

image.png

##测试

未登录状态下

http://localhost:9000/get

image.png

image.png

###登录:

http://localhost:9000/login?user=wangxianlin&pwd=123456

image.png

http://localhost:9000/get

image.png

image.png

###看一下redis里面
image.png

以上内容参考于: Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

实战——session共享(Spring Boot + Spring Session + Redis) Spring Boot + Spring Session + Redis 进行session共享,nginx进行反向代理 阅读详情

相关推荐

集群共享session;shiro实现session共享;springboot实现redis共享session;

shiro实现共享session;springboot集成redis实现共享session;集群环境下shiro共享session;shiro实现session共享

wangyue123com的专栏 2714

【springboot】 session共享

springboot中session共享的实现

今天的啊木 767

SpringBoot Session共享

好久没来写了,记录下最近学习和工作中使用的知识。 我们应用从垂直分布发展成分布式,为了实现高可用,自然会使用多实例部署。在web应用中多实例部署存在会话共享 的问题。 当一个用户登陆时在应用A节点产生session,而第二次后台交互时请求可能分发给了另外的实例,导致会话失效。 解决这个问题有以下几种常见的方案: A.找一块公共的空间用来储存session,而不是将session储存在集群节点的某台...

qq_31941773的博客 821

SpringBoot之Session共享问题

使用 @CrossOrigin 注解即可实现跨域请求,不过由此带来的问题是 HttpSession 不一致的问题;真实情景:用户请求后台验证码,后台 session 保存验证码 5 分钟,当用户在前端输入验证码后,点击确认再次发送请求到后台验证是否和上一次请求中 session 保存的验证码一致;如果前端和后台是分离开发的,请求都是跨域请求的话,就会导致两次请求方法中的 session 不一致,从而导致验证失败。

少年闰土 983

springboot+redis实现session共享

spring + redis实现session共享 springboot实现session共享只需要3步即可 一、在 pom.xml 中引入依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-red...

xiaochouyu__的博客 1159

JAVA:Spring Session提升分布式Session管理利器

本文探讨了Web应用中会话管理的几种方案及其演进。从传统的单机Web容器会话管理,到Session复制、浏览器存储、Nginx Hash一致性等方案,分析了各自的优缺点。重点介绍了SpringSession的分布式会话解决方案,包括其核心组件、存储方式(Redis/JDBC/内存)、配置实现及多域名共享处理。SpringSession通过将会话数据存储在第三方服务中,实现了跨应用共享、分布式环境下的统一会话管理,具有存储灵活、扩展性强等优势,是当前分布式系统中会话管理的理想选择。

木头 2653

springboot 的共享session方案?

因为Http协议是无状态的,而客户端与服务器之间的交互过程可以看成是一次会话,当会话结束后,服务器并不能记录会话的状态。所以服务器采用了一种技术去记录服务器和客户端会话状态,这种技术就是Session。Cookie是通过服务器通知客户端在客户端中保存一小块数据(键值对)的一种技术。所以Cookie是存储在客户端中的,并且客户端有了Cookie后每次请求服务器都会携带上Cookie的数据,每个Cookie的大小不能超过4kb。Session的创建及获取流程。

longlongqin的博客 1474

【Spring Boot】实战:实现Session共享

将所有的Session会话信息存入Redis缓存中,然后Web应用从Redis中取出Session信息实现所有应用的Session共享。然后,启动项目,运行一个程序实例,启动端口号为8080,在浏览器中输入地址:http://localhost:8080/uid,页面返回会话的sessionId,如图所示。从图可以看出,所有的服务都将Session信息存储到Redis中,无论是对Session的注销、更新都会同步到Redis中,从而达到Session共享的目的。

衍生星球的博客 722

springboot整合redis处理session共享

Spring Boot + Redis 处理 Session 共享 参考网址: https://mp.weixin.qq.com/s?__biz=MzAwMjk5Mjk3Mw==&mid=2247493417&idx=3&sn=3d5966aa32b1947f5287e2a611aec665&chksm=9ac3590badb4d01d1a7693ae52bfd752a4f9a72ff927424a5cd5a9247e87d857f0a46f7d6040&mpsha

java技术博客 906

从零到一:树莓派上的YOLO目标检测实战指南

本文详细介绍了如何在树莓派上部署和优化YOLO目标检测模型,从硬件选型到系统配置,再到模型转换与推理优化。通过对比不同树莓派型号的性能差异,提供实用的配置方案和代码示例,帮助开发者快速实现高效的边缘计算视觉系统。特别推荐使用ONNX格式进行模型转换,以提升在树莓派上的推理效率。

weixin_29046035的博客 1063

Redis架构演进:从主从、哨兵到集群,如何支撑亿级流量的秒杀场景?

本文深入探讨了分布式缓存Redis的三种核心高可用模式:主从复制、哨兵模式与集群模式。以高并发的电商秒杀业务为切入点,我们分析了每种模式的优缺点和适用场景,并最终选择Redis集群模式作为最佳解决方案。文章提供了基于Spring Boot和Spring Data Redis的完整实现代码,详细展示了如何配置和使用Redis集群来应对高并发、高可用的挑战,旨在帮助开发者在实际项目中做出正确的技术选型和架构设计。

lingRJ777的博客 724

springboot 共享session

1、pom添加jar依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency&...

weixin_30546189的博客 80

【总目录】AUTOSAR精进之路专栏介绍及内容目录持续更新...

本专栏系统讲解AUTOSAR汽车电子开发技术,包含Eth/OS/Can/Lin等协议栈、MCAL驱动、功能安全等核心模块。内容基于实际项目经验,从概念原理到工程配置、特殊需求实现及问题排查进行深入剖析。重点涵盖TC3xx芯片平台开发、多核OS、网络管理、存储协议栈等难点问题,提供100+篇原创技术文章。专栏采用付费模式,保证内容完整性和持续更新,并提供专业答疑服务。适合汽车电子工程师系统学习AUTOSAR开发技术。

qq_36056498的博客 6519

springboot将session存储在redis中,可以实现session共享,亲测

springboot将session存储在redis中,可以实现session共享 添加依赖 <!--连接redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-...

Prodigal 3484

深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能

大家好,我是微学AI,今天给大家介绍一下深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能。在去年ChatGPT的发布后,各种国内外的大语言模型层出不穷涌现,但是大家都知道现在的模型的诟病的数学能力不足,就算是简单的数学题都可能算错,今天我就来给大家引入MathGPT的模型,用来解决GPT解决数学问题,对于简单的初中数学高中数学都可以解决,让数学问题精准答题得到实现。

微学AI的博客 1651

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 353

Spring boot集成spring session实现session共享

最近使用spring boot开发一个系统,nginx做负载均衡分发请求到多个tomcat,此时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到A服务器,那么session就会被存到A服务器,再次访问时负载均衡会分发到B服务器那么第一次访问的session信息就会获取不到之前的session信息,所以需要实现session共享,还好有spring sessio...

lockie的博客 2833

ISP算法:自动白平衡(AWB)

1. 为什么要做白平衡? 人类视觉系统具有颜色恒常性特点,一次人类对物体观察不受光源影响。但是Sensor在不同光线下,物体呈现的颜色不同,在晴朗天空下会偏蓝,在烛光下会偏红。如图: 2.什么是自动白平衡? 为了消除光源对于图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。 3. 如何做自动白平衡? 只要乘以一个对角矩阵,便可以进行白平衡...

a200800170331的专栏 1万+

重学SpringBoot3-集成Redis(九)之共享Session

通过本文的介绍,我们了解了如何通过和Redis实现分布式环境下的 Session 共享。Redis 作为 Session 的集中式存储,可以确保用户在多个服务器实例之间切换时,Session 数据保持一致,解决了分布式系统中的 Session 管理问题。在实际项目中,Session 共享的场景非常常见,特别是在需要保证用户会话一致性和系统高可用的分布式架构中,Redis 是一个非常高效且可靠的解决方案。

CoderJia的学习之路 2832

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 999

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

springboot实现session共享

应用场景 如何解决 应用场景 session是指多个http请求共享的会话。如果我们后台只有一个服务器,则不存在共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图: 如何解决 思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方 此时我们先创建新的springboot项目,引入 Web、Spring Session 以及security、 Redis: <dependencies> <dependency>

一个还在上学的程序缘 2694

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

springboot中session如何共享

springboot+Redis 解决session共享问题 分布式项目现在遍地都是了,但同时也带来一个问题,那就是session共享的问题,将项目分布了以后,不可能每一个都登录一遍,顾客体验极其不好,那么只有一个办法了,session共享,解决这个有两个办法,一个是基于Redis Nosql的方案,另一个是OAuth-token这类的办法解决,可能还有其他的,希望留言,非常感谢。 本篇主要讲解r...

老秦的博客 1625

温度PID控制PLC程序

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

tomcat+session+redis及springboot共享session

1、基于tomcat的session共享至redis: *** 2、共享springboot内置tomcat的session涉及配置: 实现TomcatContextCustomizer 用于启动共享的redis 连接 public class Test implements TomcatContextCustomizer { @Override public void customize(Context context) { RedisSessionMa...

qq_36497461的博客 574

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Boot Session共享2种方式

Spring Boot(21)分布式Session:为了使Web能适应大规模的访问,需要实现应用程序的集群部署 实现集群部署首先要解决session的统一,即需要实现session的共享机制,即分布式Session。 分布式Session的实现方式 基于resin/tomcat web容器本身的session复制机制 基于NFS共享文件系统 基于Cookie进行session共享 基于

shuiluobu的专栏 2万+
上一篇: 【SpringBoot】 集成 Ehcache
下一篇: 【VUE】 文件预览
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值