使用org.crazycake.shiro存入redis是二进制的,如何修改
时间: 2024-04-29 07:23:24 浏览: 73
您可以通过自定义Redis序列化器来修改org.crazycake.shiro存入Redis的二进制数据。以下是实现自定义Redis序列化器的步骤:
1. 创建一个类,实现RedisSerializer接口,该接口包含两个方法:serialize和deserialize。
2. 在serialize方法中,将对象序列化为字节数组,并返回该字节数组。
3. 在deserialize方法中,将字节数组反序列化为对象,并返回该对象。
4. 在ShiroRedisManager实例化时,通过setRedisSerializer方法设置自定义的Redis序列化器。
下面是一个示例代码:
```
public class MyRedisSerializer implements RedisSerializer<Object> {
private final Converter<Object, byte[]> serializer;
private final Converter<byte[], Object> deserializer;
public MyRedisSerializer() {
this.serializer = new SerializingConverter();
this.deserializer = new DeserializingConverter();
}
@Override
public byte[] serialize(Object object) throws SerializationException {
if (object == null) {
return new byte[0];
}
return serializer.convert(object);
}
@Override
public Object deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length == 0) {
return null;
}
return deserializer.convert(bytes);
}
}
public class ShiroRedisManager {
private RedisManager redisManager;
public ShiroRedisManager() {
redisManager = new RedisManager();
redisManager.setHost("localhost");
redisManager.setPort(6379);
redisManager.setTimeout(5000);
redisManager.setPassword("password");
MyRedisSerializer serializer = new MyRedisSerializer();
redisManager.setRedisSerializer(serializer);
}
}
```
在上面的代码中,我们创建了一个MyRedisSerializer类,它实现了RedisSerializer接口,并使用SerializingConverter和DeserializingConverter来序列化和反序列化对象。然后在ShiroRedisManager的构造函数中,我们实例化了一个MyRedisSerializer对象,并通过setRedisSerializer方法设置自定义的Redis序列化器。
阅读全文