在我的REST controllers Spring项目中,我想在Redis中存储会话信息。
在我的Application.Properties中,我定义了以下内容:
spring.session.store-type=redis
spring.session.redis.namespace=rdrestcore
com.xyz.redis.host=192.168.201.46
com.xyz.redis.db=0
com.xyz.redis.port=6379
com.xyz.redis.pool.min-idle=5
我还启用了Http Redis会话:
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer
{}
我终于有了一个这样的redis连接工厂:
@Configuration
@EnableRedisRepositories
public class RdRedisConnectionFactory {
@Autowired
private Environment env;
@Value("${com.xyz.redis.host}")
private String redisHost;
@Value("${com.xyz.redis.db}")
private Integer redisDb;
@Value("${com.xyz.redis.port}")
private Integer redisPort;
@Value("${com.xyz.redis.pool.min-idle}")
private Integer redisPoolMinIdle;
@Bean
JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
if(redisPoolMinIdle!=null) poolConfig.setMinIdle(redisPoolMinIdle);
return poolConfig;
}
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
if(redisHost!=null) jedisConFactory.setHostName(redisHost);
if(redisPort!=null) jedisConFactory.setPort(redisPort);
if(redisDb!=null) jedisConFactory.setDatabase(redisDb);
jedisConFactory.setPoolConfig(jedisPoolConfig());
return jedisConFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate< String, Object > template = new RedisTemplate();
template.setConnectionFactory( jedisConnectionFactorySpring());
template.setKeySerializer( new StringRedisSerializer() );
template.setValueSerializer( new GenericJackson2JsonRedisSerializer() );
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer( new GenericJackson2JsonRedisSerializer() );
return template;
}
}
*spring:session:sessions:c1110241-0aed-4d40-9861-43553b3526cb*
\xac\xx\x00\x05sr\x00\x0ejava.lang.long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01j\x00\x05valuexr\x00\x10java.lang.number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01b$g\x88*
(用于creationTime键)
如果我试图通过redisTemplate从代码中访问这些信息,它会产生一个类似这样的异常:
目标虚拟机中发生异常:无法反序列化;嵌套异常为org.springframework.core.serializer.support.serializationfailedexception:反序列化有效负载失败。字节数组是DefaultDeserializer相应序列化的结果吗?;嵌套异常为java.io.StreamCorruptedException:无效的流头:73657373 org.SpringFramework.Data.Redis.Serializer.SerializationException:无法反序列化;嵌套异常为org.springframework.core.serializer.support.serializationfailedexception:反序列化有效负载失败。字节数组是DefaultDeserializer相应序列化的结果吗?;嵌套异常为java.io.StreamcorruptedException:org.springframework.data.redis.serializer.jdkserializationredisserializer.deserialize(jdkserializationredisserializer.java:82)处的流头:73657373无效
我认为Spring会话信息的序列化/反序列化存在某种问题,但我不知道还可以做什么来控制它。
有人知道我做错了什么吗?
谢谢你
你是在正确的轨道上,你的问题确实是系列化。尝试此配置(仅使用这些序列化器配置模板):
template.setHashValueSerializer(new JdkSerializationRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setKeySerializer(new StringRedisSerializer());
template.setDefaultSerializer(new JdkSerializationRedisSerializer());
我有一个微服务架构中的spring网关。 当请求到达网关时,它必须以下面提到的方式进行操作 创建会话并设置属性 在redis中保存会话 将请求路由到Microservice B Microservice B接收会话ID并从会话获取属性 在尝试实现这一点时,(第2点)保存会话ID的操作发生在调用microservices B并返回其响应(第4点)之后。(即第2点发生在第4点之后)。 但是,在请求被路
在应用程序中创建了会话 在Redis CLI中运行“keys*”命令,看到一个新条目(如“spring:session:sessions:6b55103a-baf5-4a05-a127-3a9cfa15c164”) 从应用程序中向会话添加自定义bean 在Redis CLI中运行“keys*”命令,并看到该bean的另一个新条目(如“\xac\xed\x00\x05t\x00\tcustomer1
问题内容: 我在整个互联网上进行搜索,但是找不到答案有明确的解决方案。 我在Java中使用Selenium Webdriver。 我的测试需要验证何时保存登录信息,然后关闭浏览器并重新打开,然后这些凭据仍然保留并保存在新会话中。因此,我想关闭当前会话并重新打开它,以验证cookie是否仍保留在页面上,但是Selenium删除了所有存储的会话数据,因此测试用例将始终失败。在针对特定测试用例关闭浏览器
问题内容: 我在整个互联网上进行搜索,但是找不到答案有明确的解决方案。 我在Java中使用Selenium Webdriver。 我的测试需要验证何时保存登录信息并关闭浏览器并重新打开,然后这些凭据仍然保留并保存在新会话中。因此,我想关闭当前会话并重新打开它,以验证cookie是否仍保留在页面上,但是Selenium删除了所有存储的会话数据,因此测试用例将始终失败。关闭特定测试用例的浏览器后,是否
当我运行它时,我得到一个no this session错误。
问题内容: 我正在尝试在我的Express应用程序中使用redis进行会话。 我执行以下操作: 稍后,在我的应用程序中,如果执行以下操作: 我得到: 无法读取未定义的属性“ someProperty” 这表明req.session是未定义的 (我可以从config部分的console.log条目中看到) 我肯定有redis运行,并且可以看到我的应用最初连接到它(使用redis-cli监视器) 问题