保定模板建站哪家好,商城服务是什么平台,好的公司网站建设,免费的html代码模板文章目录 一#xff0c;228-商城业务-认证服务-自定义SpringSession完成子域session共享1. cookieSerializer()2. springSessionDefaultRedisSerializer() 一#xff0c;228-商城业务-认证服务-自定义SpringSession完成子域session共享
前面弄清楚了分布式服务中的两个问题228-商城业务-认证服务-自定义SpringSession完成子域session共享1. cookieSerializer()2. springSessionDefaultRedisSerializer() 一228-商城业务-认证服务-自定义SpringSession完成子域session共享
前面弄清楚了分布式服务中的两个问题
浏览器端跨域名cookie不能共享服务端跨服务session不能共享
我们已经在上一节解决了扩服务session共享的问题即利用Spring Session将session存储在redis中所有有需要的服务都可以从redis中获取session。
这一节主要是解决
① 浏览器端跨域名cookie不能共享的问题② session在redis中的序列化方式默认是jdk的序列化改为json序列化
对于第一个问题虽然是浏览器端的问题但是必须在服务端解决思路非常简单将cookie的domain设置为根域名而不是发起请求的域名。
即认证服务在设置cookie的domain时应该设置为gulimall.com而不是auth.gulimall.com。
根据Spring Session的文档要实现上述目标通过增加一个自动配置类即可
Configuration
public class GulimallSessionConfig {Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer cookieSerializer new DefaultCookieSerializer();//放大作用域cookieSerializer.setDomainName(gulimall.com);cookieSerializer.setCookieName(GULISESSION);return cookieSerializer;}Beanpublic RedisSerializerObject springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}}
1. cookieSerializer()
这个方法用于配置 CookieSerializer它是 Spring Session 中用来序列化和反序列化 HTTP Cookie 的对象。CookieSerializer 负责处理与 HTTP Cookie 相关的操作比如设置 Cookie 的名称、路径、域名等。
具体作用
创建一个 DefaultCookieSerializer 实例。设置 Cookie 的域名setDomainName为 gulimall.com这表示该 Cookie 可以在整个 gulimall.com 域及其子域下有效。设置 Cookie 的名称setCookieName为 GULISESSION这是客户端用来标识 Session 的 Cookie 名称。
目的
增强 Cookie 的作用范围通过设置 Cookie 的域名可以确保该 Cookie 在整个 gulimall.com 域下有效这样就可以在不同的子域间共享 Session 信息。自定义 Cookie 的名称通过设置 Cookie 名称可以根据需要选择一个更具辨识度的名字。
2. springSessionDefaultRedisSerializer()
这个方法用于配置 Spring Session 中 Redis 的序列化器。Redis 是一种键值存储系统它默认使用字符串类型的数据结构。因此当你想要将复杂的 Java 对象存储到 Redis 中时需要对其进行序列化。
具体作用
返回一个 GenericJackson2JsonRedisSerializer 实例。这个序列化器使用 Jackson JSON 库将 Java 对象转换为 JSON 字符串然后再存储到 Redis 中。
目的 序列化和反序列化对象由于 Redis 默认只支持字符串类型的值因此需要一个序列化器将 Java 对象转换为字符串形式以便在 Redis 中存储和检索。 兼容复杂对象使用 JSON 格式可以轻松地存储和检索复杂的 Java 对象而不仅仅是基本的数据类型。 cookieSerializer() 方法配置了 HTTP Cookie 的序列化器主要用于设置 Cookie 的名称和作用范围以便在不同的子域间共享 Session 信息。 springSessionDefaultRedisSerializer() 方法配置了 Redis 的序列化器用于将 Java 对象转换为 JSON 字符串形式存储到 Redis 中使得可以存储复杂的对象数据。
这两个方法共同作用于 Spring Session 的配置确保了 Session 数据可以正确地在客户端和 Redis 之间传递和存储。