原因
大家都知道通过 @EnableRedisHttpSession可以将HttpSession保存于Redis中,来实现Session共享,但在使用时,对于超时常用的方式是使用 maxInactiveIntervalInSeconds参数,而这个参数的写法是
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
如果要通过配置文件设置这个时间,会比较麻烦,在网上找了很多实现方案都没解决。
实现方案
上代码,通过继承实现 RedisHttpSessionConfiguration
@Configuration
public class RedisSessionConfig extends RedisHttpSessionConfiguration {
@Value("${server.session.timeout:1800}")//配置文件参数名
private int sessionTimeout;
@Autowired
RedisTemplate<Object, Object> redisTemplate;
@Bean
@Override
public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(SessionRepository<S> sessionRepository) {
((RedisOperationsSessionRepository)sessionRepository).setDefaultMaxInactiveInterval(sessionTimeout);
return super.springSessionRepositoryFilter(new SafeDeserializationRepository<>(sessionRepository, redisTemplate));
}
}