大致配置文件:
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"])
查了下,是反序列化报错,字段啥的,但是也没看出啥问题啊?求解
<pre><code>Unrecognized field "valid"</code></pre>
你调试看看是不是序列化的时候有‘valid’这个字段,反序列化的实体没有这个字段
回复 <a class="referer" target="_blank">@Danielly</a> : 谢谢指点,它确实不是一个字段,是一个isValid的方法,返回bool类型,我目前使用了其他的序列化方式,避过这一环先,非常感谢指导!
回复 <a class="referer" target="_blank">@樱木花道VS康</a> : 那有可能valid不是Session对象的一个属性,而是一个方法。Jackson序列化是通过方法来确定字段的,你可以序列化的时候把valid方法忽略,或者反序列化的时候忽略未知字段
您好,我是使用的shiro里面的session,我是redis存储session,在获取就出了,存储后确实有这个字段,同一个类型从Redis读取就报错这个字段不识别,,,
<p>解决了没有,我也遇到这个问题了</p>
没有啊,,,我放弃使用jackson2序列化了,不用json显示了,,,回头再研究
<p>现在我也遇到这个问题了,有好的解决方案没有</p>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。