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)); } }