Skip to content

Commit 87ebf7d

Browse files
mp911dechristophstrobl
authored andcommitted
DATAREDIS-524 - Use password to connect Redis nodes using Sentinel.
LettuceConnectionFactory and DefaultLettucePool now use the configured password to authenticate with Redis. Authentication is applied when connecting to nodes that were obtained from Redis Sentinel. Original Pull Request: #204
1 parent 1207eb5 commit 87ebf7d

File tree

4 files changed

+61
-2
lines changed

4 files changed

+61
-2
lines changed

src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePool.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.data.redis.connection.PoolException;
2727
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
2828
import org.springframework.util.Assert;
29+
import org.springframework.util.StringUtils;
2930

3031
import com.lambdaworks.redis.RedisAsyncConnection;
3132
import com.lambdaworks.redis.RedisClient;
@@ -120,7 +121,13 @@ public void afterPropertiesSet() {
120121
private RedisURI getRedisURI() {
121122

122123
if (isRedisSentinelAware()) {
123-
return LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration);
124+
RedisURI redisURI = LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration);
125+
126+
if (StringUtils.hasText(password)) {
127+
redisURI.setPassword(password);
128+
}
129+
130+
return redisURI;
124131
}
125132

126133
return createSimpleHostRedisURI();

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,14 @@ private AbstractRedisClient createRedisClient() {
607607
}
608608

609609
private RedisURI getSentinelRedisURI() {
610-
return LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration);
610+
611+
RedisURI redisURI = LettuceConverters.sentinelConfigurationToRedisURI(sentinelConfiguration);
612+
613+
if (StringUtils.hasText(password)) {
614+
redisURI.setPassword(password);
615+
}
616+
617+
return redisURI;
611618
}
612619

613620
/**

src/test/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
*/
1616
package org.springframework.data.redis.connection.lettuce;
1717

18+
import static org.hamcrest.Matchers.*;
1819
import static org.junit.Assert.*;
20+
import static org.springframework.test.util.ReflectionTestUtils.*;
1921

22+
import java.util.Collections;
2023
import java.util.concurrent.TimeUnit;
2124

2225
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
@@ -26,9 +29,11 @@
2629
import org.springframework.data.redis.SettingsUtils;
2730
import org.springframework.data.redis.connection.PoolConfig;
2831
import org.springframework.data.redis.connection.PoolException;
32+
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
2933

3034
import com.lambdaworks.redis.RedisAsyncConnection;
3135
import com.lambdaworks.redis.RedisException;
36+
import com.lambdaworks.redis.RedisURI;
3237

3338
/**
3439
* Unit test of {@link DefaultLettucePool}
@@ -189,6 +194,22 @@ public void testCreateInvalidPassword() {
189194
pool.getResource();
190195
}
191196

197+
/**
198+
* @see DATAREDIS-524
199+
*/
200+
@Test
201+
public void testCreateSentinelWithPassword() {
202+
203+
pool = new DefaultLettucePool(new RedisSentinelConfiguration("mymaster", Collections.singleton("host:1234")));
204+
pool.setClientResources(LettuceTestClientResources.getSharedClientResources());
205+
pool.setPassword("foo");
206+
pool.afterPropertiesSet();
207+
208+
RedisURI redisURI = (RedisURI) getField(pool.getClient(), "redisURI");
209+
210+
assertThat(redisURI.getPassword(), is(equalTo(pool.getPassword().toCharArray())));
211+
}
212+
192213
/**
193214
* @see DATAREDIS-462
194215
*/

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
import static org.junit.Assert.*;
2222
import static org.springframework.test.util.ReflectionTestUtils.*;
2323

24+
import java.util.Collections;
2425
import java.util.concurrent.TimeUnit;
2526

2627
import org.junit.After;
2728
import org.junit.Before;
2829
import org.junit.Test;
2930
import org.springframework.data.redis.ConnectionFactoryTracker;
3031
import org.springframework.data.redis.connection.RedisClusterConfiguration;
32+
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
3133

3234
import com.lambdaworks.redis.AbstractRedisClient;
3335
import com.lambdaworks.redis.RedisClient;
@@ -114,6 +116,28 @@ public void passwordShouldBeSetCorrectlyOnClusterClient() {
114116
}
115117
}
116118

119+
/**
120+
* @see DATAREDIS-524
121+
*/
122+
@Test
123+
@SuppressWarnings("unchecked")
124+
public void passwordShouldBeSetCorrectlyOnSentinelClient() {
125+
126+
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(
127+
new RedisSentinelConfiguration("mymaster", Collections.singleton("host:1234")));
128+
connectionFactory.setClientResources(LettuceTestClientResources.getSharedClientResources());
129+
connectionFactory.setPassword("o_O");
130+
connectionFactory.afterPropertiesSet();
131+
ConnectionFactoryTracker.add(connectionFactory);
132+
133+
AbstractRedisClient client = (AbstractRedisClient) getField(connectionFactory, "client");
134+
assertThat(client, instanceOf(RedisClient.class));
135+
136+
RedisURI redisURI = (RedisURI) getField(client, "redisURI");
137+
138+
assertThat(redisURI.getPassword(), is(equalTo(connectionFactory.getPassword().toCharArray())));
139+
}
140+
117141
/**
118142
* @see DATAREDIS-462
119143
*/

0 commit comments

Comments
 (0)