package com.doumee.config.shiro;
|
|
import org.apache.commons.lang3.SerializationUtils;
|
import org.apache.shiro.codec.Base64;
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
import org.springframework.data.redis.serializer.SerializationException;
|
|
import java.io.Serializable;
|
import java.nio.charset.StandardCharsets;
|
|
/**
|
* Session序列化
|
* @author Eva.Caesar Liu
|
* @since 2025/03/31 16:44
|
*/
|
public class ShiroSessionSerializer implements RedisSerializer<Serializable> {
|
|
@Override
|
public byte[] serialize(Serializable obj) throws SerializationException {
|
if (obj == null) {
|
return new byte[0];
|
}
|
String sessionBase64 = Base64.encodeToString(SerializationUtils.serialize(obj));
|
return sessionBase64.getBytes(StandardCharsets.UTF_8);
|
}
|
|
@Override
|
public Serializable deserialize(byte[] bytes) throws SerializationException {
|
if (bytes == null || bytes.length == 0) {
|
return null;
|
}
|
String sessionString = new String(bytes, StandardCharsets.UTF_8);
|
byte[] sessionBytes = Base64.decode(sessionString);
|
return SerializationUtils.deserialize(sessionBytes);
|
}
|
}
|