先说结论:
项目中定制了spring 的redisTemplate,而这个template没有使用我自定义的Jackson ObjectMapper。所以不生效。
下面是详细过程:
起因是spring boot项目加入了shiro,我打算使用redis去存储shiro的会话,方便以后横向扩展。
参考了网上的实现后,决定通过扩展org.apache.shiro.session.mgt.eis.AbstractSessionDAO来实现。
以下是实现代码:


1 package com.ceiec.baseplatform.config; 2 3 import com.ceiec.baseplatform.redis.StringKeyRedisTemplate; 4 import org.apache.commons.collections.CollectionUtils; 5 import org.apache.shiro.session.Session; 6 import org.apache.shiro.session.UnknownSessionException; 7 import org.apache.shiro.session.mgt.eis.AbstractSessionDAO; 8 import org.slf4j.Logger; 9 import org.slf4j.LoggerFactory; 10 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.stereotype.Component; 12 13 import java.io.Serializable; 14 import java.util.Collection; 15 import java.util.concurrent.TimeUnit; 16 17 @Component 18 public class RedisSessionDAO extends AbstractSessionDAO { 19 private static Logger logger = LoggerFactory.getLogger(RedisSessionDAO.class); 20 21 @SuppressWarnings("rawtypes") 22 @Autowired 23 private StringKeyRedisTemplate<String, Object> redisTemplate; 24 25 private static final String DEFAULT_SESSION_KEY_PREFIX = "shirosession:"; 26 27 private String keyPrefix = DEFAULT_SESSION_KEY_PREFIX; 28 29 private long expireTime = 120000; </