Spring 中的 Jedis 连接无法在 Redis 上进行身份验证

问题描述

我有一个 Spring Boot 应用程序通过 tls 和密码连接到 Redis

我使用以下配置来实例化 RedistTemplate 和 JedisConnection

 @Bean
  JedisConnectionFactory jedisConnectionFactory() {
     RedisStandaloneConfiguration conf = new RedisStandaloneConfiguration(host,port);
     conf.setPassword(RedisPassword.of("myPassword"));
     JedisConnectionFactory jedisConFactory = null;
     JedisClientConfiguration confJedis = JedisClientConfiguration.builder().useSsl().build();
     jedisConFactory =  new JedisConnectionFactory(conf,confJedis);
     //jedisConFactory.setPassword("myPassword");
     return jedisConFactory;
  }


 @Bean
  public Redistemplate<String,Object> redistemplate() {
      Redistemplate<String,Object> template = new Redistemplate<>();
      template.setConnectionFactory(jedisConnectionFactory());
      return template;
  }

我收到以下错误

class org.springframework.dao.InvalidDataAccessApiUsageExceptionNOAUTH Authentication required.; nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.

这似乎是 Redis 未收到密码的错误

在 redis 上启用 TLS 配置之前,我使用了这个配置:

  @Bean
  JedisConnectionFactory jedisConnectionFactory() {
     RedisStandaloneConfiguration conf = new RedisStandaloneConfiguration(host,port);
     conf.setPassword(RedisPassword.of("myPassword"));
     JedisConnectionFactory jedisConFactory = null;
     jedisConFactory =  new JedisConnectionFactory(conf);
     return jedisConFactory;
  }

而且它工作得很好。 因此,我在 Jedis 配置中使用 TLS 设置密码的“如何”中的某些内容不起作用,我什至使用了已弃用的方法(在上面的代码段中进行了评论):

//jedisConFactory.setPassword("myPassword");

看看它是否可行,但没有成功。

有人看到我做错了什么吗?

解决方法

我遇到了同样的问题,并通过在代码中添加 .and().usePooling() 来修复它,如下所示:

JedisClientConfiguration confJedis = JedisClientConfiguration.builder().useSsl().and().usePooling().build();

我找到了答案here