java - io.lettuce.core.RedisException: java.lang.RuntimeException: GCM 模式下的无效键或规范
问题描述
我使用 Lettuce 库 (5.1.6.Release) 作为 Java redis 客户端来创建与 Redis 的连接。
下面是我使用 Java 8 的 SpringBoot 应用程序的代码片段。
ClientOptions options =
ClientOptions.builder()
.disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
.autoReconnect(true)
.build();
LettucePoolingClientConfiguration pool = LettucePoolingClientConfiguration.builder()
.poolConfig(new GenericObjectPoolConfig())
.clientOptions(options)
.clientResources(DefaultClientResources.create())
.useSsl()
.build();
RedisConnectionFactory factory = new LettuceConnectionFactory(new RedisStandaloneConfiguration("host name string here"), pool);
RedisTemplate<String, String> redisConn = new RedisTemplate<>();
redisConn.setConnectionFactory(factory);
redisConn.setKeySerializer(StringRedisSerializer.UTF_8);
redisConn.setValueSerializer(StringRedisSerializer.UTF_8);
redisConn.setEnableTransactionSupport(true);
redisConn
是singlton Spring Bean跨服务使用,在Redis中添加数据
SetOperations<String, String> setOperations = redisTemplate.opsForSet();
setOperations.add("key1", "value1");
setOperations.add("key2", "value2");
setOperations.add("key3", "value3");
在 Executer 服务提供的 java 单线程中在 redis 中执行添加操作时出现以下错误
org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: java.lang.RuntimeException: invalid key or spec in GCM mode
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:74) ~[spring-data-redis-2.1.6.RELEASE.jar!/:2.1.6.RELEASE]
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) ~[spring-data-redis-2.1.6.RELEASE.jar!/:2.1.6.RELEASE]
....
Caused by: io.lettuce.core.RedisException: java.lang.RuntimeException: invalid key or spec in GCM mode
at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:129) ~[lettuce-core-5.1.6.RELEASE.jar!/:?]
at io.lettuce.core.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:69) ~[lettuce-core-5.1.6.RELEASE.jar!/:?]
....
Caused by: java.lang.RuntimeException: invalid key or spec in GCM mode
at sun.security.ssl.CipherBox.createExplicitNonce(CipherBox.java:1043) ~[?:1.8.0_191]
at sun.security.ssl.OutputRecord.encrypt(OutputRecord.java:248) ~[?:1.8.0_191]
at sun.security.ssl.EngineOutputRecord.write(EngineOutputRecord.java:153) ~[?:1.8.0_191]
....
Caused by: java.security.InvalidAlgorithmParameterException: Cannot reuse iv for GCM encryption
at com.sun.crypto.provider.CipherCore.init(CipherCore.java:583) ~[sunjce_provider.jar:1.8.0_191]
at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:346) ~[sunjce_provider.jar:1.8.0_191]
at javax.crypto.Cipher.init(Cipher.java:1393) ~[?:1.8.0_191]
解决方案
推荐阅读
- sql-server - 使用文件系统添加现有包的副本
- python - 在 Mac、python 2.7.5 上安装 gsutil 时出现致命错误
- r - R:如何根据其他列中的因素向新列添加值
- reactjs - 测试方法 else/if 不返回预期值
- python - 一种热编码 - 如何修复逻辑回归中的列匹配
- css - 可折叠内容的 CSS 网格列灵活
- mysql - 数据库触发器删除条件为真的行:
- python - 数据框中每列的平均值
- sql - 如何将求和值与sql中的连接一起添加
- java - 如何将我的 JButton 连接到我的 JTextField 以将我输入的 int 存储到 JTextField 中?