springboot+shiro+redis序列化问题

樱木花道VS康 发布于 2018/07/02 14:46
阅读 1K+
收藏 0

大致配置文件:

redis:

@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {

    StringRedisTemplate template = new StringRedisTemplate(factory);
    setSerializer(template); //设置序列化工具,这样ReportBean不需要实现Serializable接口
    template.afterPropertiesSet();
    return template;
}

private void setSerializer(StringRedisTemplate template) {

    // 使用Jackson2JsonRedisSerialize 替换默认序列化
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);

    template.setValueSerializer(jackson2JsonRedisSerializer);
}

shiro:继承

AbstractSessionDAO
/**
 * 读取session
 * @param sessionId
 * @return
 */
@Override
protected Session doReadSession(Serializable sessionId) {
    System.out.println("==============doReadSession=================");
    if (sessionId == null) {
        return null;
    }

    Session session = (Session) redisTemplate.opsForValue().get(sessionId);
    logger.info("读取session++++++++++++:sessionId = "+sessionId+",session:"+session);

    return session;
}

但是读取的时候报错:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "valid" (class org.apache.shiro.session.mgt.SimpleSession), not marked as ignorable (10 known properties: "attributeKeys", "timeout", "startTimestamp", "expired", "lastAccessTime", "host", "id", "stopTimestamp", "attributes", "attributesLazy"])
 

查了下,是反序列化报错,字段啥的,但是也没看出啥问题啊?求解

 

加载中
0
Danielly
Danielly
Unrecognized field "valid"

你调试看看是不是序列化的时候有‘valid’这个字段,反序列化的实体没有这个字段

樱木花道VS康
樱木花道VS康
回复 @Danielly : 谢谢指点,它确实不是一个字段,是一个isValid的方法,返回bool类型,我目前使用了其他的序列化方式,避过这一环先,非常感谢指导!
Danielly
Danielly
回复 @樱木花道VS康 : 那有可能valid不是Session对象的一个属性,而是一个方法。Jackson序列化是通过方法来确定字段的,你可以序列化的时候把valid方法忽略,或者反序列化的时候忽略未知字段
樱木花道VS康
樱木花道VS康
您好,我是使用的shiro里面的session,我是redis存储session,在获取就出了,存储后确实有这个字段,同一个类型从Redis读取就报错这个字段不识别,,,
0
bcisx
bcisx

解决了没有,我也遇到这个问题了

 

樱木花道VS康
樱木花道VS康
没有啊,,,我放弃使用jackson2序列化了,不用json显示了,,,回头再研究
0
总有奸臣想害朕
总有奸臣想害朕

现在我也遇到这个问题了,有好的解决方案没有

返回顶部
顶部