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

一,首页无用户信息

在这里插入图片描述
谷粒商城首页,点击超链接您好,请登录,正常情况下应该跳转到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 {

    @Bean
    public CookieSerializer cookieSerializer() {

        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();

        //放大作用域
        cookieSerializer.setDomainName("gulimall.com");
        cookieSerializer.setCookieName("GULISESSION");

        return cookieSerializer;
    }


    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }

}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值