SpringBoot集成SpringSessionRedis
1 导入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2 使用fastjson序列化
import java.nio.charset.Charset;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* FastJson序列化类
* @author fulin.tang, bo.hong
* @param <T>
*/
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
public FastJson2JsonRedisSerializer() {
super();
}
public FastJson2JsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz;
}
@Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return (T) JSON.parseObject(str, clazz);
}
}
config配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
import com.alibaba.fastjson.parser.ParserConfig;
@Configuration
public class RedisSessionConfig {
/**
* 解决高版本的springboot会自动将session用base64转码。
* 导致与底版本springboot无法session共享。
* 此配置为禁止转码
*/
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer(DefaultCookieSerializer cookieSerializer){
ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // fastjson策略,允许AutoType
cookieSerializer.setUseBase64Encoding(false);// 此配置为禁止转码
cookieSerializer.setCookieName("springsession"); // cookie为共享session的基础,不同项目的cookiename要相同才能共享session
cookieSerializer.setCookiePath("/"); // path为根
cookieSerializer.setCookieMaxAge(7200); // 2小时过期
cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); // 同域共享配置
cookieSerializer.setUseHttpOnlyCookie(true);
cookieSerializer.setSameSite(null);
return new FastJson2JsonRedisSerializer<>();
}
}
yaml配置
spring:
redis:
host: xx
port: xx
password: xx
database: xx
session:
store-type: redis