spring session cookie序列化规则类DefaultCookieSerializer

介绍

DefaultCookieSerializer 类是默认的cookie序列化规则类,该类很有用:

  • 设置是否使用base64编码。在浏览器看到的SESSION值与redis数据库看到的值不一致,就是因为spring session2.x默认开启base64编码
    • spring-session 1.x默认 不使用
    • spring-session 2.x默认 使用
  • 通过该类可以设置 cookie的seesion key,默认为:SESSION
  • 设置cookie的path

springboot配置方式

在配置类中增加下面方法

@Bean
public DefaultCookieSerializer getDefaultCookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        //cookieSerializer.setDomainName("mydomain.com");
        cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        cookieSerializer.setCookieName("SESSION");
        cookieSerializer.setCookiePath("/");
        cookieSerializer.setUseBase64Encoding(false);
        return cookieSerializer;
}

spring mvc配置方式

<bean id="defaultCookieSerializer" class="org.springframework.session.web.http.DefaultCookieSerializer">
        <property name="domainName" value="mydomain.com" />
        <property name="cookieName" value="SESSION" />
        <property name="cookiePath" value="/" />
</bean>

解释

  • domainNamePattern : 域名的正则表达式。^.?\\.(\\w\\.[a-z]+)$ 是个通用写法。如果正则表达式不匹配,则不会设置任何域。如果正则表达式匹配,则第一个分组将用作域。例如:https://child.mydomain.com的请求会将域设置为mydomain.com。http:// localhost:8080 /或https://192.168.1.100:8080/的请求将不对域名进行处理。因此,在切换域名时,不需要再做任何修改。
  • domainName : 域名。设置成你想使用的域名。应设置成项目所在域名的某个父级域名。
  • cookieName : session id的cookie名称。
  • cookiePath : cookie path。
  • useBase64Encoding : 是否使用base64将session id进行编码。
    spring-session 1.x默认 不使用
    spring-session 2.x默认 使用

让浏览器SESSION值与redis的值一致 — 禁用base64编码

增加配置类

@Configuration
public class Config {
    @Bean
    public DefaultCookieSerializer getDefaultCookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
//        cookieSerializer.setDomainName("mydomain.com");
//        cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
//        cookieSerializer.setCookieName("SESSION");
//        cookieSerializer.setCookiePath("/"); //设置cookie的path为/,即:根路径
//        cookieSerializer.setUseBase64Encoding(false);
        cookieSerializer.setUseBase64Encoding(false);
        return cookieSerializer;
    }
}

浏览器中的cookie,redis数据库中的值 ,是一致的,如下图:

感谢:
https://blog.csdn.net/sayyy/article/details/104199215


原文出处:/show_1EF5w5s5wvDt.html