✅P228_商城业务-认证服务-自定义Spring Session完成子域session共享

gong_yz大约 1 分钟谷粒商城

解决子域session共享问题

cfmall-product服务和cfmall-auth-server服务各配置一份,内容相同

session默认使用jdk进行序列化,不方便阅读,修改为json。配置类设置session使用json序列化,并放大作用域;

解决使用json序列化方式来序列化对象数据到redis中: spring-session/SessionConfig.java at 2.4.6 · spring-projects/spring-session · GitHubopen in new window

package com.gyz.cfmall.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
public class CfMalllSessionConfig {

    /**
     * 放大作用域,解决子域共享问题
     *
     * @return
     */
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("CFMALLSESSION");
        serializer.setDomainName("cfmall.com");
        return serializer;
    }

    /**
     * 使用json序列化将对象序列化存储到redis中
     *
     * @return
     */
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

Index.html修改

前端页面修改,登录用户需要进行非空判断

<li>
    <a href="http://auth.cfmall.com/login.html">你好,请登录:[[${session.loginUser==null?'':session.loginUser.nickname}}]]</a>
</li>

清空Redis和session后重新启动测试、执行登录操作;

测试效果