Spring Session使用

news2024/12/26 2:56:15

一.使用场景

前后端不分离的情况下,往登陆页auth.gulimall.com的session中存放一个用户信息,想要在首页gulimall.com中取出该数据并展示出来

 	@GetMapping("/oauth2.0/gitee/success")
    public String oauth2(@RequestParam("code") String code, HttpSession httpSession) throws Exception {
		......
		if (r.getCode() == 0){
                MemberOAuthVo memberOAuthVo = r.getData(new TypeReference<MemberOAuthVo>() {});
                log.info("用户信息:{}",memberOAuthVo);
                httpSession.setAttribute("loginUser",memberOAuthVo);
                return "redirect:http://gulimall.com";
	     }
	    ......
    }

首页
在这里插入图片描述

二.session不共享的原因

1. 如果想要取出session数据需要通过Cookie的JSESSIONIDDomain,这里的Domain规定了session可以在那些域名下面使用,每一个域名下的的Domain是不同的,这就导致域名a的数据不能被域名b拿到

在这里插入图片描述
在这里插入图片描述

2. 并且session是存放在服务器内存中,如果是一个服务多实例的情况,那么每个服务器的内存也是无法共享session的

三.解决方法

1. 解决不同域名无法共享session的问题

放大JSESSIONID的DOMAIN作用域,实战中不可能手动修改DOMAIN范围,使用springsession解决 auth.gulimall.com -> .gulimall.com

2. 解决分布式服务(同服务不同实例)不共享session的问题

将session存在redis中

四.导入Spring Session

1.导入依赖(存的服务和取的服务都需要配置一份 )

        <!--解决session不共享-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

2.application.properties

#session存储类型
spring.session.store-type=redis
#session过期时间: 默认30分钟
server.servlet.session.timeout=30

3.启动类添加注解

自动将HttpSession中的数据存入redis,原来HttpSession源码是从currentMap内存中存取session,现在是从包装后的wrappedRequest取session,也是从redis上操作存和取session

@EnableRedisHttpSession

@EnableRedisHttpSession导入RedisHttpSessionConfiguration配置,给容器中添加了一个组件
RedisOperationsSessionRepository:Redis操作session,session的增删改查封装类

4.自定义配置类

解决Domain子域名无法获取session数据的问题

@Configuration
public class GulimallSessionConfig {

    /**
     * 自定义session的使用范围——Domain
     */
    @Bean
    public CookieSerializer cookieSerializer(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        defaultCookieSerializer.setDomainName("gulimall.com");
        defaultCookieSerializer.setCookieName("GULISESSION");
        return defaultCookieSerializer;
    }

    /**  
     * 自定义redis序列化方式为json,原来是Serializable
     */
    @Bean
    public RedisSerializer<Object> redisSerializer(){
        return new GenericJackson2JsonRedisSerializer();
    }
}

五. 实现效果

首页
在这里插入图片描述
点击登陆 —> 授权成功 —> 获取用户信息 —> 用户信息存入session
在这里插入图片描述

在登录页与主页不同域名的情况下,登陆页授权成功往session中存入用户信息,跳转至首页 ,首页取出session中用户名并展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

组态王与PLC通过RJ45口建立无线以太网通讯

本文以组态王和2台三菱FX5u PLC为例&#xff0c;介绍组态王与多台 PLC的无线以太网通信实现过程。在本方案中采用了三菱PLC无线通讯终端DTD419MB&#xff0c;作为实现无线通讯的硬件设备。 在这一无线以太网通讯系统的搭建中&#xff0c;用户无需更改网络参数和原有程序&#…

Ubuntu的USB相关操作

这里写目录标题 0.信息查看1. 串口设备设置2. 串口调试助手 0.信息查看 指令lsusb输出Bus 004 Device 002: ID 05e3:0620 Genesys Logic, Inc. USB3.2 Hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 006: ID 5986:115f Acer, Inc Integ…

佩戴最舒服的蓝牙耳机推荐,好用、佩戴体验很不错的蓝牙耳机分享

​面对市面上不同场景使用、不同类型的蓝牙耳机&#xff0c;我们选购蓝牙耳机时应该如何选&#xff1f;最怕遇到耳机延迟高、不防水防汗、音质表现差以及佩戴体验差的蓝牙耳机&#xff0c;针对这些经常面临的问题&#xff0c;我这次精选了四款市面上热销质量不错的蓝牙耳机分享…

PMP考试经验分享,准备不要超过三个月‼️

因为各种原因&#xff08;拖延、贪玩、上课 哈哈&#xff09; 我是用一个半月时间准备的PMP考试 3A通过 努力➕幸运的结果 资料准备&#xff1a; PMBOK第六版和第七版&#xff08;PMI官方教材&#xff09; 机构的视频材料&#xff08;巩固基础&#xff09; 模拟题库&#…

计算机原理基础一

内存 计算机数据存储&#xff0c;存储数据的基本单位是字节(Byte),常说的大b,1字节等于8位,8个bit(小b)。每个字节都对应一个内存地址&#xff0c;内存地址是从0开始编写的&#xff0c;然后自增排列&#xff0c;类似数组&#xff0c;C当中空类的大小是1个字节&#xff0c;就是…

JUC并发工具类--AQS

JUC并发工具类--AQS 管程 — Java同步的设计思想MESA模型 AQS&#xff08;AbstractQueuedSynchronizer&#xff1a;抽象队列同步器&#xff09;AQS简介AQS核心结构AQS内部维护属性state。state三种访问方式 两种资源访问方式AQS实现时主要实现的方法isHeldExclusively()tryAcqu…

安全应急产业新标兵, 前沿科技保安全

推广行业前沿技术 服务部队练兵备战 助力应急强国建设 科学应急 一馆一园一平台 安全应急项目推荐 海淀区安全应急产品展示交易中心 同赴时代之约&#xff0c;共创美好未来。 指导单位 2023年4月12日上午&#xff0c; “海淀区安全应急产品展示交易中心“揭牌启动仪式在中…

图像噪声和滤波

图像噪声 在图像采集、处理和传输过程中会受到噪声的影响。常见的图像噪声有椒盐噪声、高斯噪声等。 椒盐噪声 椒盐噪声也叫脉冲噪声&#xff0c;在图像中比较常见&#xff0c;表现为随机出现的噪点&#xff0c;比如在明亮区域中出现的黑色像素。参考下图的例子&#xff1a; 高…

【更改python版本】——日常记录

目录索引 卸载旧版本&#xff1a;提示&#xff1a;python launcher&#xff1a; 下载过程&#xff1a;配置pycharm&#xff1a;提示点&#xff1a;python console打不开的问题&#xff1a; 卸载旧版本&#xff1a; 要卸载 Python 3.7.7 在 Windows 上&#xff0c;请按照以下步骤…

接口测试持续集成

目录 一.在Windows系统上部署Jenkins1.下载Jenkins安装包2.启动Tomcat服务3.通过浏览器访问Jenkins 二.管理Jenkins中的插件1.安装插件2.更新插件3.卸载插件 三.创建项目四.配置项目运行频率 一.在Windows系统上部署Jenkins 1.下载Jenkins安装包 进入Jenkins官网&#xff0c;…

22-作用域链的理解

文章目录 作用域全局作用域函数作用域块级作用域二、词法作用域三、作用域链 作用域 &#x1f37f;&#x1f37f;&#x1f37f;作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 作用域决定了代…

【案例31】数据源密码保存不上

问题现象 客户反馈在启动BIP高级版时&#xff0c;Bip 2207启动异常。在相关的启动日志中排查发现&#xff0c;报数据源连接异常的错误。排查发现BIP高级版的数据源不通。发现密码字段为空导致。 问题分析 添加了正确的密码&#xff0c;测试通过保存。再次重启。发现还是报数据…

如何支持研发对CSDN个性化推荐系统重构

目录 大地图工具构建数据治理保持发布重视测试小结 一个以内容服务为主的软件&#xff0c;它的推荐系统在数据侧对软件产生着举足轻重的作用。数据的三个方面决定了这个内容软件的档次。 数据的质量好坏数据和用户需求的相关性好坏数据的层次体系好坏 通常&#xff0c;我们说…

40 # npm 的使用

npm 3n&#xff1a; nrm&#xff1a;node 中源管理工具nvm&#xff1a;node 中的版本管理工具npm&#xff1a;node 的包管理器&#xff0c;管理的都是 node 的模块 第三方模块 分两种&#xff1a; 全局模块&#xff1a;只能在命令行中使用&#xff0c;任何路径都可以本地模…

前端高频JS面试题(附答案+视频讲解)

高频前端js面试题总结 对应的视频讲解位置 2023前端高频面试题-JS高频面试题&#xff08;上&#xff09;_哔哩哔哩_bilibili 目录 1. var let const 的区别&#xff1f; 2. javascript 有哪些基础数据类型&#xff1f; 3. null和undefined区别 4. 与 的区别&#xff1f;…

二十三种设计模式第十二篇--组合模式

组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示整体-部分的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 在组合模式中&#xff0c;有两种类型的对象&#xff1a;叶子对象和组合对象。叶子对象表示树结构中的叶子节点&…

为什么需要建设海绵城市?

海绵城市&#xff0c;是新一代城市雨洪管理概念&#xff0c;是指城市在适应环境变化和应对雨水带来的自然灾害等方面具有良好的“弹性”&#xff0c;也可称之为“水弹性城市”。其本质上是一种生态化的城市发展模式&#xff0c;其核心是将城市建设与生态环境保护相结合。 为什么…

二.《UE4奥丁》解密哈希ID

哈希表概念 1.相信大家经常在UE4或者UE5游戏逆向中遇到下面的代码段 $ > > 41:8B42 0C > mov eax,dword ptr ds:[r10C] > $4 > 3B05 AE589B04 > cmp eax,dword ptr ds:[7FF7B68B74F4] …

DeFi(去中心化金融),定义金融服务的未来

在数字化时代&#xff0c;区块链技术的发展引领了金融服务的全新变革。去中心化金融&#xff08;DeFi&#xff09;作为区块链技术的重要应用之一&#xff0c;正在重新定义传统金融服务的未来。本文将探讨DeFi的概念、优势以及对金融服务的影响&#xff0c;并展望其在未来的发展…

Linux上配置安装Nginx

Linux上安装配置Nginx 前言安装参考 前言 在前文中介绍了Nginx&#xff1a;Nginx入门 现在我们来试着在服务器上安装以下Nginx&#xff0c;以下操作使用的版本为1.20.0 下载地址为&#xff1a;Nginx官网下载地址 安装 先把包丢上去&#xff0c;我这里使用的是XFtp连接的服…