谷粒商城实战笔记-问题记录-首页没有显示用户名-跨域session问题

本文主要是介绍谷粒商城实战笔记-问题记录-首页没有显示用户名-跨域session问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一,首页无用户信息
  • 二,定位
  • 三,两个问题
    • 1,跨域名session共享
    • 2,分布式服务跨服务共享问题
  • 问题记录
    • 解决方案

一,首页无用户信息

在这里插入图片描述
谷粒商城首页,点击超链接您好,请登录,正常情况下应该跳转到Auth模块的login页面,登录成功后,会重定向到首页,超链接您好,请登录应该替换为用户名。

但是实际开发过程中出现了这样一个问题,登录成功后,超链接您好,请登录未被替换,再次点击这个超链接,不会跳转到登录界面,说明后台认为已经登录成功,直接重定向到首页了,但是首页没有拿到用户信息。

F12查看Application信息,也没有发现sessioncookie信息。

在这里插入图片描述

二,定位

梳理登录流程,看看问题可能出现在哪个环节。

  • 首页点击超链接您好,请登录
  • 跳转到auth.gulimall.com/login.html,这里很关键,商城用户认证模块的域名和首页域名不一致
  • 认证模块完成用户验证后,将用户信息保存在session
  • auth模块的前端页面login.htmlsession信息保存在cookie中,注意是保存在域名auth.gulimall.com
  • 重定向到首页,首页的域名是gulimall.com,所以不会携带cookie信息,首页后端拿不到用户信息,无法渲染页面

解释问题原因

  • 登录功能是两个模块协同完成的,登录模块完成登录,在域名auth.gulimall.com下保存cookie
  • 用户信息保存在认证服务的session中,首页模块的前端拿不到cookie,及时拿到了cookie,也拿不到session,因为session保存在auth认证服务的内存中,没有保存在首页所在的商品服务内存中,取不到用户信息。

下图可以看到auth.gulimall.com下是有cookie保存的。

在这里插入图片描述

三,两个问题

1,跨域名session共享

父域名获取不到子域名的cookie,这个可以在后台定制cookie,把域名的cookie设置为父域名。

				Cookie cookie = new Cookie("JSESSIONID", session.getId());cookie.setPath("/");cookie.setDomain("gulimall.com");servletResponse.addCookie(cookie);

注意,cookienamedomainpath是非空的信息。

这样设置之后,在首页就能看到父域名有cookie信息了。

在这里插入图片描述

即便如此,首页在渲染时仍然拿不到用户信息,因为用户session信息保存在auth任务服务的内存中,首页所在的product服务是访问不到的。

还必须解决跨服务session共享问题。

2,分布式服务跨服务共享问题

参考谷粒商城实战笔记-227-商城业务-认证服务-SpringSession整合
谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享

问题记录

上面的问题解决后,登录成功后,首页还是不显示用户名。

原因是auth模块配置了json序列化方式,但是product模块没有配置。

解决方案

把auth模块的配置类copy到product模块即可。

在这里插入图片描述

@Configuration
public class GulimallSessionConfig {@Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();//放大作用域cookieSerializer.setDomainName("gulimall.com");cookieSerializer.setCookieName("GULISESSION");return cookieSerializer;}@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}}

这篇关于谷粒商城实战笔记-问题记录-首页没有显示用户名-跨域session问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094556

相关文章

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu