This is an automated email from the ASF dual-hosted git repository.

markap14 pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
     new c24271fb43 NIFI-12140 Add optional properties to 
RedisConnectionPoolService for Username and Sentinel Username (#7862)
c24271fb43 is described below

commit c24271fb432aeaf93082ca4ab7469948891dc753
Author: Bryan Bende <bbe...@apache.org>
AuthorDate: Tue Oct 10 14:39:41 2023 -0400

    NIFI-12140 Add optional properties to RedisConnectionPoolService for 
Username and Sentinel Username (#7862)
---
 .../ITRedisDistributedMapCacheClientService.java   | 87 +++++++++++++++++-----
 .../nifi/redis/testcontainers/RedisContainer.java  | 11 +++
 .../testcontainers/RedisReplicaContainer.java      |  5 ++
 .../testcontainers/RedisSentinelContainer.java     | 17 +++++
 .../org/apache/nifi/redis/util/RedisConfig.java    | 19 +++++
 .../org/apache/nifi/redis/util/RedisUtils.java     | 30 +++++++-
 6 files changed, 149 insertions(+), 20 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/service/ITRedisDistributedMapCacheClientService.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/service/ITRedisDistributedMapCacheClientService.java
index 15b3c41792..a83b46f915 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/service/ITRedisDistributedMapCacheClientService.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/service/ITRedisDistributedMapCacheClientService.java
@@ -87,7 +87,7 @@ public class ITRedisDistributedMapCacheClientService {
 
     @Test
     public void testStandaloneRedis() throws InitializationException, 
IOException {
-        int redisPort = setupStandaloneRedis(null).port;
+        int redisPort = setupStandaloneRedis(null,null).port;
         setUpRedisConnectionPool(portsToConnectionString(redisPort), pool -> {
             // uncomment this to test using a different database index than 
the default 0
             //  testRunner.setProperty(pool, RedisUtils.DATABASE, "1");
@@ -98,9 +98,24 @@ public class ITRedisDistributedMapCacheClientService {
     }
 
     @Test
-    public void testStandaloneRedisWithAuthentication() throws 
InitializationException, IOException {
+    public void testStandaloneRedisWithUsernameAndPasswordAuthentication() 
throws InitializationException, IOException {
+        final String redisUsername = "foo";
         final String redisPassword = "foobared";
-        final int redisPort = setupStandaloneRedis(redisPassword).port;
+        final int redisPort = setupStandaloneRedis(redisUsername, 
redisPassword).port;
+        setUpRedisConnectionPool(portsToConnectionString(redisPort), pool -> {
+            testRunner.setProperty(redisConnectionPool, RedisUtils.USERNAME, 
redisUsername);
+            testRunner.setProperty(redisConnectionPool, RedisUtils.PASSWORD, 
redisPassword);
+        });
+        setupRedisMapCacheClientService();
+
+        executeProcessor();
+    }
+
+
+    @Test
+    public void testStandaloneRedisWithDefaultUserAuthentication() throws 
InitializationException, IOException {
+        final String redisPassword = "foobared";
+        final int redisPort = setupStandaloneRedis(null, redisPassword).port;
         setUpRedisConnectionPool(portsToConnectionString(redisPort), pool -> {
             testRunner.setProperty(redisConnectionPool, RedisUtils.PASSWORD, 
redisPassword);
         });
@@ -111,15 +126,15 @@ public class ITRedisDistributedMapCacheClientService {
 
     @Test
     public void testSentinelRedis() throws InitializationException, 
IOException {
-        RedisContainer redisMasterContainer = setupStandaloneRedis(null);
+        RedisContainer redisMasterContainer = setupStandaloneRedis(null,null);
         String masterHost = "127.0.0.1";
         int masterPort = redisMasterContainer.port;
-        setUpRedisReplica(masterHost, masterPort, null);
-        setUpRedisReplica(masterHost, masterPort, null);
+        setUpRedisReplica(masterHost, masterPort, null, null);
+        setUpRedisReplica(masterHost, masterPort, null, null);
 
-        int sentinelAPort = setUpSentinel(masterHost, masterPort, null, 2, 
null).port;
-        int sentinelBPort = setUpSentinel(masterHost, masterPort, null, 2, 
null).port;
-        int sentinelCPort = setUpSentinel(masterHost, masterPort, null, 2, 
null).port;
+        int sentinelAPort = setUpSentinel(masterHost, masterPort, null, null, 
2, null, null).port;
+        int sentinelBPort = setUpSentinel(masterHost, masterPort, null, null, 
2, null, null).port;
+        int sentinelCPort = setUpSentinel(masterHost, masterPort, null, null, 
2, null, null).port;
 
         setUpRedisConnectionPool(portsToConnectionString(sentinelAPort, 
sentinelBPort, sentinelCPort), pool -> {
             testRunner.setProperty(redisConnectionPool, RedisUtils.REDIS_MODE, 
REDIS_MODE_SENTINEL);
@@ -132,25 +147,56 @@ public class ITRedisDistributedMapCacheClientService {
     }
 
     @Test
-    public void testSentinelRedisWithAuthentication() throws 
InitializationException, IOException {
+    public void testSentinelRedisWithDefaultUserAuthentication() throws 
InitializationException, IOException {
         String redisPassword = "t0p_53cr35";
         String sentinelPassword = "otherPassword";
 
-        RedisContainer redisMasterContainer = 
setupStandaloneRedis(redisPassword);
+        RedisContainer redisMasterContainer = setupStandaloneRedis(null, 
redisPassword);
         String masterHost = "127.0.0.1";
         int masterPort = redisMasterContainer.port;
-        setUpRedisReplica(masterHost, masterPort, redisPassword);
-        setUpRedisReplica(masterHost, masterPort, redisPassword);
+        setUpRedisReplica(masterHost, masterPort, null, redisPassword);
+        setUpRedisReplica(masterHost, masterPort, null, redisPassword);
+
+        int sentinelAPort = setUpSentinel(masterHost, masterPort, null, 
redisPassword, 2, null, sentinelPassword).port;
+        int sentinelBPort = setUpSentinel(masterHost, masterPort, null, 
redisPassword, 2, null, sentinelPassword).port;
+        int sentinelCPort = setUpSentinel(masterHost, masterPort, null, 
redisPassword, 2, null, sentinelPassword).port;
 
-        int sentinelAPort = setUpSentinel(masterHost, masterPort, 
redisPassword, 2, sentinelPassword).port;
-        int sentinelBPort = setUpSentinel(masterHost, masterPort, 
redisPassword, 2, sentinelPassword).port;
-        int sentinelCPort = setUpSentinel(masterHost, masterPort, 
redisPassword, 2, sentinelPassword).port;
+        setUpRedisConnectionPool(portsToConnectionString(sentinelAPort, 
sentinelBPort, sentinelCPort), pool -> {
+            testRunner.setProperty(redisConnectionPool, RedisUtils.REDIS_MODE, 
REDIS_MODE_SENTINEL);
+            testRunner.setProperty(redisConnectionPool, 
RedisUtils.SENTINEL_MASTER, masterName);
+
+            testRunner.setProperty(redisConnectionPool, RedisUtils.PASSWORD, 
redisPassword);
+            testRunner.setProperty(redisConnectionPool, 
RedisUtils.SENTINEL_PASSWORD, sentinelPassword);
+        });
+        setupRedisMapCacheClientService();
+
+        executeProcessor();
+    }
+
+    @Test
+    public void testSentinelRedisWithUsernameAndPasswordAuthentication() 
throws InitializationException, IOException {
+        final String redisUser = "redisUser";
+        final String redisPassword = "t0p_53cr35";
+        final String sentinelUsername = "sentinelUser";
+        final String sentinelPassword = "otherPassword";
+
+        final RedisContainer redisMasterContainer = 
setupStandaloneRedis(redisUser, redisPassword);
+        final String masterHost = "127.0.0.1";
+        final int masterPort = redisMasterContainer.port;
+        setUpRedisReplica(masterHost, masterPort, redisUser, redisPassword);
+        setUpRedisReplica(masterHost, masterPort, redisUser, redisPassword);
+
+        int sentinelAPort = setUpSentinel(masterHost, masterPort, redisUser, 
redisPassword, 2, sentinelUsername, sentinelPassword).port;
+        int sentinelBPort = setUpSentinel(masterHost, masterPort, redisUser, 
redisPassword, 2, sentinelUsername, sentinelPassword).port;
+        int sentinelCPort = setUpSentinel(masterHost, masterPort, redisUser, 
redisPassword, 2, sentinelUsername, sentinelPassword).port;
 
         setUpRedisConnectionPool(portsToConnectionString(sentinelAPort, 
sentinelBPort, sentinelCPort), pool -> {
             testRunner.setProperty(redisConnectionPool, RedisUtils.REDIS_MODE, 
REDIS_MODE_SENTINEL);
             testRunner.setProperty(redisConnectionPool, 
RedisUtils.SENTINEL_MASTER, masterName);
 
+            testRunner.setProperty(redisConnectionPool, RedisUtils.USERNAME, 
redisUser);
             testRunner.setProperty(redisConnectionPool, RedisUtils.PASSWORD, 
redisPassword);
+            testRunner.setProperty(redisConnectionPool, 
RedisUtils.SENTINEL_USERNAME, sentinelUsername);
             testRunner.setProperty(redisConnectionPool, 
RedisUtils.SENTINEL_PASSWORD, sentinelPassword);
         });
         setupRedisMapCacheClientService();
@@ -167,13 +213,14 @@ public class ITRedisDistributedMapCacheClientService {
         redisContainers.forEach(RedisContainer::stop);
     }
 
-    private RedisContainer setupStandaloneRedis(final @Nullable String 
redisPassword) throws IOException {
+    private RedisContainer setupStandaloneRedis(@Nullable final String 
redisUsername, final @Nullable String redisPassword) throws IOException {
         int redisPort = getAvailablePort();
 
         RedisContainer redisContainer = new 
RedisContainer(CONTAINER_IMAGE_TAG);
         redisContainer.mountConfigurationFrom(testDirectory);
         redisContainer.setPort(redisPort);
         redisContainer.addPortBinding(redisPort, redisPort);
+        redisContainer.setUsername(redisUsername);
         redisContainer.setPassword(redisPassword);
 
         redisContainers.add(redisContainer);
@@ -184,6 +231,7 @@ public class ITRedisDistributedMapCacheClientService {
 
     private RedisReplicaContainer setUpRedisReplica(final @NonNull String 
masterHost,
                                                     final int masterPort,
+                                                    final @Nullable String 
redisUsername,
                                                     final @Nullable String 
redisPassword) throws IOException {
         int replicaPort = getAvailablePort();
 
@@ -192,6 +240,7 @@ public class ITRedisDistributedMapCacheClientService {
         redisReplicaContainer.setPort(replicaPort);
         redisReplicaContainer.addPortBinding(replicaPort, replicaPort);
         redisReplicaContainer.setReplicaOf(masterHost, masterPort);
+        redisReplicaContainer.setUsername(redisUsername);
         redisReplicaContainer.setPassword(redisPassword);
 
         redisContainers.add(redisReplicaContainer);
@@ -202,8 +251,10 @@ public class ITRedisDistributedMapCacheClientService {
 
     private RedisSentinelContainer setUpSentinel(final @NonNull String 
masterHost,
                                                  final int masterPort,
+                                                 final @Nullable String 
redisUsername,
                                                  final @Nullable String 
redisPassword,
                                                  final int quorumSize,
+                                                 final @Nullable String 
sentinelUsername,
                                                  final @Nullable String 
sentinelPassword) throws IOException {
         int sentinelPort = getAvailablePort();
 
@@ -215,7 +266,9 @@ public class ITRedisDistributedMapCacheClientService {
         redisSentinelContainer.setMasterPort(masterPort);
         redisSentinelContainer.setMasterName(masterName);
         redisSentinelContainer.setQuorumSize(quorumSize);
+        redisSentinelContainer.setUsername(redisUsername);
         redisSentinelContainer.setPassword(redisPassword);
+        redisSentinelContainer.setSentinelUsername(sentinelUsername);
         redisSentinelContainer.setSentinelPassword(sentinelPassword);
 
         redisContainers.add(redisSentinelContainer);
diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisContainer.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisContainer.java
index 24f5b68a98..cd06d3e9a0 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisContainer.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisContainer.java
@@ -44,6 +44,8 @@ public class RedisContainer extends 
GenericContainer<RedisContainer> {
 
     public int port = REDIS_PORT;
 
+    @Nullable
+    protected String username = null;
     @Nullable
     protected String password = null;
     @Nullable
@@ -51,6 +53,10 @@ public class RedisContainer extends 
GenericContainer<RedisContainer> {
 
     protected final List<String> configurationOptions = new ArrayList<>();
 
+    public void setUsername(@Nullable String username) {
+        this.username = username;
+    }
+
     public void setPassword(final @Nullable String password) {
         this.password = password;
     }
@@ -70,6 +76,11 @@ public class RedisContainer extends 
GenericContainer<RedisContainer> {
     protected void adjustConfiguration() {
         addConfigurationOption("port " + port);
 
+        if (username != null) {
+            final String userPassword = password == null ? "nopass" : ">" + 
password;
+            addConfigurationOption("user " + username + " on " + userPassword 
+ " ~* allcommands allchannels");
+        }
+
         if (password != null) {
             addConfigurationOption("requirepass " + password);
         }
diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisReplicaContainer.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisReplicaContainer.java
index 815fe33f85..c9c5061fdc 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisReplicaContainer.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisReplicaContainer.java
@@ -50,6 +50,11 @@ public class RedisReplicaContainer extends RedisContainer {
     protected void adjustConfiguration() {
         addConfigurationOption("port " + port);
 
+        if (username != null) {
+            final String userPassword = password == null ? "nopass" : ">" + 
password;
+            addConfigurationOption("user " + username + " on " + userPassword 
+ " ~* allcommands allchannels");
+        }
+
         if (password != null) {
             addConfigurationOption("requirepass " + password);
             addConfigurationOption("masterauth " + password);
diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisSentinelContainer.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisSentinelContainer.java
index 06b802dc3b..1fe7815a2a 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisSentinelContainer.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-extensions/src/test/java/org/apache/nifi/redis/testcontainers/RedisSentinelContainer.java
@@ -44,6 +44,8 @@ public class RedisSentinelContainer extends RedisContainer {
     @NonNull
     protected String masterName = "mymaster";
     @Nullable
+    protected String sentinelUsername = null;
+    @Nullable
     protected String sentinelPassword = null;
     private long downAfterMilliseconds = 60000L;
     private long failoverTimeout = 180000L;
@@ -62,6 +64,10 @@ public class RedisSentinelContainer extends RedisContainer {
         this.masterName = masterName;
     }
 
+    public void setSentinelUsername(final @Nullable String sentinelUsername) {
+        this.sentinelUsername = sentinelUsername;
+    }
+
     public void setSentinelPassword(final @Nullable String sentinelPassword) {
         this.sentinelPassword = sentinelPassword;
     }
@@ -92,9 +98,20 @@ public class RedisSentinelContainer extends RedisContainer {
         addConfigurationOption(String.format("sentinel failover-timeout %s 
%d", masterName, failoverTimeout));
         addConfigurationOption(String.format("sentinel parallel-syncs %s %d", 
masterName, parallelSyncs));
 
+        if (username != null) {
+            addConfigurationOption("sentinel auth-user " + masterName + " " + 
username);
+        }
+
         if (password != null) {
             addConfigurationOption("sentinel auth-pass " + masterName + " " + 
password);
         }
+
+        if (sentinelUsername != null) {
+            final String sentinelUserPassword = sentinelPassword == null ? 
"nopass" : ">" + sentinelPassword;
+            addConfigurationOption("user " + sentinelUsername + " on " + 
sentinelUserPassword + " ~* allcommands allchannels");
+            addConfigurationOption("sentinel sentinel-user " + 
sentinelUsername);
+        }
+
         if (sentinelPassword != null) {
             addConfigurationOption("requirepass " + sentinelPassword);
             addConfigurationOption("sentinel sentinel-pass " + 
sentinelPassword);
diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisConfig.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisConfig.java
index c5da310093..3149a52e5d 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisConfig.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisConfig.java
@@ -27,7 +27,10 @@ public class RedisConfig {
     private final String connectionString;
 
     private String sentinelMaster;
+    private String sentinelUsername;
     private String sentinelPassword;
+
+    private String username;
     private String password;
 
     private int dbIndex = 0;
@@ -68,6 +71,14 @@ public class RedisConfig {
         this.sentinelMaster = sentinelMaster;
     }
 
+    public String getSentinelUsername() {
+        return sentinelUsername;
+    }
+
+    public void setSentinelUsername(String sentinelUsername) {
+        this.sentinelUsername = sentinelUsername;
+    }
+
     public String getSentinelPassword() {
         return sentinelPassword;
     }
@@ -84,6 +95,14 @@ public class RedisConfig {
         this.dbIndex = dbIndex;
     }
 
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
     public String getPassword() {
         return password;
     }
diff --git 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisUtils.java
 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisUtils.java
index b44d6027d0..f89152387d 100644
--- 
a/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisUtils.java
+++ 
b/nifi-nar-bundles/nifi-redis-bundle/nifi-redis-utils/src/main/java/org/apache/nifi/redis/util/RedisUtils.java
@@ -140,6 +140,13 @@ public class RedisUtils {
             
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
 
+    public static final PropertyDescriptor USERNAME = new 
PropertyDescriptor.Builder()
+            .name("Username")
+            .description("The username used to authenticate to the Redis 
server.")
+            .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
+            .build();
+
     public static final PropertyDescriptor PASSWORD = new 
PropertyDescriptor.Builder()
             .name("Password")
             .displayName("Password")
@@ -149,6 +156,13 @@ public class RedisUtils {
             .sensitive(true)
             .build();
 
+    public static final PropertyDescriptor SENTINEL_USERNAME = new 
PropertyDescriptor.Builder()
+            .name("Sentinel Username")
+            .description("The username used to authenticate to the Redis 
sentinel server.")
+            .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
+            .build();
+
     public static final PropertyDescriptor SENTINEL_PASSWORD = new 
PropertyDescriptor.Builder()
             .name("Sentinel Password")
             .displayName("Sentinel Password")
@@ -292,7 +306,9 @@ public class RedisUtils {
         props.add(RedisUtils.COMMUNICATION_TIMEOUT);
         props.add(RedisUtils.CLUSTER_MAX_REDIRECTS);
         props.add(RedisUtils.SENTINEL_MASTER);
+        props.add(RedisUtils.USERNAME);
         props.add(RedisUtils.PASSWORD);
+        props.add(RedisUtils.SENTINEL_USERNAME);
         props.add(RedisUtils.SENTINEL_PASSWORD);
         props.add(RedisUtils.SSL_CONTEXT_SERVICE);
         props.add(RedisUtils.POOL_MAX_TOTAL);
@@ -317,7 +333,9 @@ public class RedisUtils {
         final RedisConfig redisConfig = new RedisConfig(redisType, 
connectString);
         
redisConfig.setSentinelMaster(context.getProperty(RedisUtils.SENTINEL_MASTER).evaluateAttributeExpressions().getValue());
         
redisConfig.setDbIndex(context.getProperty(RedisUtils.DATABASE).evaluateAttributeExpressions().asInteger());
+        
redisConfig.setUsername(context.getProperty(RedisUtils.USERNAME).evaluateAttributeExpressions().getValue());
         
redisConfig.setPassword(context.getProperty(RedisUtils.PASSWORD).evaluateAttributeExpressions().getValue());
+        
redisConfig.setSentinelUsername(context.getProperty(RedisUtils.SENTINEL_USERNAME).evaluateAttributeExpressions().getValue());
         
redisConfig.setSentinelPassword(context.getProperty(RedisUtils.SENTINEL_PASSWORD).evaluateAttributeExpressions().getValue());
         
redisConfig.setTimeout(context.getProperty(RedisUtils.COMMUNICATION_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue());
         
redisConfig.setClusterMaxRedirects(context.getProperty(RedisUtils.CLUSTER_MAX_REDIRECTS).asInteger());
@@ -344,7 +362,9 @@ public class RedisUtils {
         final RedisType redisMode = redisConfig.getRedisMode();
         final String connectionString = redisConfig.getConnectionString();
         final Integer dbIndex = redisConfig.getDbIndex();
+        final String username = redisConfig.getUsername();
         final String password = redisConfig.getPassword();
+        final String sentinelUsername = redisConfig.getSentinelUsername();
         final String sentinelPassword = redisConfig.getSentinelPassword();
         final Integer timeout = redisConfig.getTimeout();
         final JedisPoolConfig poolConfig = createJedisPoolConfig(redisConfig);
@@ -372,7 +392,7 @@ public class RedisUtils {
             final String host = hostAndPortSplit[0].trim();
             final Integer port = Integer.parseInt(hostAndPortSplit[1].trim());
             final RedisStandaloneConfiguration redisStandaloneConfiguration = 
new RedisStandaloneConfiguration(host, port);
-            enrichRedisConfiguration(redisStandaloneConfiguration, dbIndex, 
password, sentinelPassword);
+            enrichRedisConfiguration(redisStandaloneConfiguration, dbIndex, 
username, password, sentinelUsername, sentinelPassword);
 
             connectionFactory = new 
JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
 
@@ -380,7 +400,7 @@ public class RedisUtils {
             final String[] sentinels = connectionString.split("[,]");
             final String sentinelMaster = redisConfig.getSentinelMaster();
             final RedisSentinelConfiguration sentinelConfiguration = new 
RedisSentinelConfiguration(sentinelMaster, new 
HashSet<>(getTrimmedValues(sentinels)));
-            enrichRedisConfiguration(sentinelConfiguration, dbIndex, password, 
sentinelPassword);
+            enrichRedisConfiguration(sentinelConfiguration, dbIndex, username, 
password, sentinelUsername, sentinelPassword);
 
             LOGGER.info("Connecting to Redis in sentinel mode...");
             LOGGER.info("Redis master = " + sentinelMaster);
@@ -396,7 +416,7 @@ public class RedisUtils {
             final Integer maxRedirects = redisConfig.getClusterMaxRedirects();
 
             final RedisClusterConfiguration clusterConfiguration = new 
RedisClusterConfiguration(getTrimmedValues(clusterNodes));
-            enrichRedisConfiguration(clusterConfiguration, dbIndex, password, 
sentinelPassword);
+            enrichRedisConfiguration(clusterConfiguration, dbIndex, username, 
password, sentinelUsername, sentinelPassword);
             clusterConfiguration.setMaxRedirects(maxRedirects);
 
             LOGGER.info("Connecting to Redis in clustered mode...");
@@ -422,15 +442,19 @@ public class RedisUtils {
 
     private static void enrichRedisConfiguration(final RedisConfiguration 
redisConfiguration,
                                                  final Integer dbIndex,
+                                                 @Nullable final String 
username,
                                                  @Nullable final String 
password,
+                                                 @Nullable final String 
sentinelUsername,
                                                  @Nullable final String 
sentinelPassword) {
         if (redisConfiguration instanceof 
RedisConfiguration.WithDatabaseIndex) {
             ((RedisConfiguration.WithDatabaseIndex) 
redisConfiguration).setDatabase(dbIndex);
         }
         if (redisConfiguration instanceof RedisConfiguration.WithPassword) {
+            ((RedisConfiguration.WithPassword) 
redisConfiguration).setUsername(username);
             ((RedisConfiguration.WithPassword) 
redisConfiguration).setPassword(RedisPassword.of(password));
         }
         if (redisConfiguration instanceof 
RedisConfiguration.SentinelConfiguration) {
+            ((RedisConfiguration.SentinelConfiguration) 
redisConfiguration).setSentinelUsername(sentinelUsername);
             ((RedisConfiguration.SentinelConfiguration) 
redisConfiguration).setSentinelPassword(RedisPassword.of(sentinelPassword));
         }
     }

Reply via email to