使用org.crazycake.shiro整合redis存入数据库的数据的是二进制的
时间: 2024-06-04 19:14:01 浏览: 162
我作为AI语言模型无法确定您的问题的上下文,但是我将尝试回答您的问题。如果您使用org.crazycake.shiro整合redis存储数据,并且您在数据库中看到的数据是二进制的,那么这可能是因为在存储数据时使用了Redis的序列化功能。 Redis默认使用二进制序列化,因此在将数据存储到Redis中时,它将被序列化为二进制格式。如果您希望在数据库中看到更易于阅读的数据,您可以考虑使用其他序列化方法,例如JSON序列化。
相关问题
使用org.crazycake.shiro存入redis是二进制的,如何修改
您可以通过自定义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序列化器。
阅读全文