Skip to content

Commit 849091d

Browse files
christophstroblmp911de
authored andcommitted
DATAREDIS-974 - Apply SSL configuration when creating Jedis Cluster.
Original pull request: #472.
1 parent 07099dc commit 849091d

File tree

2 files changed

+51
-7
lines changed

2 files changed

+51
-7
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import org.springframework.util.Assert;
5959
import org.springframework.util.ClassUtils;
6060
import org.springframework.util.CollectionUtils;
61-
import org.springframework.util.StringUtils;
6261

6362
/**
6463
* Connection factory creating <a href="https://github.com/xetorthio/jedis">Jedis</a> based connections.
@@ -425,12 +424,10 @@ protected JedisCluster createCluster(RedisClusterConfiguration clusterConfig, Ge
425424

426425
int redirects = clusterConfig.getMaxRedirects() != null ? clusterConfig.getMaxRedirects() : 5;
427426

428-
int connectTimeout = getConnectTimeout();
429-
int readTimeout = getReadTimeout();
430-
431-
return StringUtils.hasText(getPassword())
432-
? new JedisCluster(hostAndPort, connectTimeout, readTimeout, redirects, getPassword(), poolConfig)
433-
: new JedisCluster(hostAndPort, connectTimeout, readTimeout, redirects, poolConfig);
427+
return new JedisCluster(hostAndPort, getConnectTimeout(), getReadTimeout(), redirects, getPassword(),
428+
clientConfiguration.getClientName().orElse(null), poolConfig, isUseSsl(),
429+
clientConfiguration.getSslSocketFactory().orElse(null), clientConfiguration.getSslParameters().orElse(null),
430+
clientConfiguration.getHostnameVerifier().orElse(null), null);
434431
}
435432

436433
/*

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java

+47
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import static org.mockito.Mockito.*;
2020

2121
import redis.clients.jedis.JedisCluster;
22+
import redis.clients.jedis.JedisClusterConnectionHandler;
23+
import redis.clients.jedis.JedisClusterInfoCache;
2224
import redis.clients.jedis.JedisPoolConfig;
2325
import sun.net.www.protocol.https.DefaultHostnameVerifier;
2426

@@ -27,13 +29,15 @@
2729
import java.time.Duration;
2830
import java.time.temporal.ChronoUnit;
2931

32+
import javax.net.ssl.HostnameVerifier;
3033
import javax.net.ssl.SSLContext;
3134
import javax.net.ssl.SSLParameters;
3235
import javax.net.ssl.SSLSocketFactory;
3336

3437
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
3538
import org.junit.Test;
3639
import org.springframework.data.redis.connection.RedisClusterConfiguration;
40+
import org.springframework.data.redis.connection.RedisClusterConnection;
3741
import org.springframework.data.redis.connection.RedisPassword;
3842
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
3943
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
@@ -287,6 +291,49 @@ public void shouldReturnClusterConfiguration() {
287291
assertThat(connectionFactory.getClusterConfiguration()).isSameAs(configuration);
288292
}
289293

294+
@Test // DATAREDIS-975
295+
public void shouldApplySslConfigWhenCreatingClusterClient() throws NoSuchAlgorithmException {
296+
297+
SSLParameters sslParameters = new SSLParameters();
298+
SSLContext context = SSLContext.getDefault();
299+
SSLSocketFactory socketFactory = context.getSocketFactory();
300+
JedisPoolConfig poolConfig = new JedisPoolConfig();
301+
HostnameVerifier hostNameVerifier = new DefaultHostnameVerifier();
302+
303+
JedisClientConfiguration configuration = JedisClientConfiguration.builder() //
304+
.useSsl() //
305+
.hostnameVerifier(hostNameVerifier) //
306+
.sslParameters(sslParameters) //
307+
.sslSocketFactory(socketFactory).and() //
308+
.clientName("my-client") //
309+
.connectTimeout(Duration.ofMinutes(1)) //
310+
.readTimeout(Duration.ofMinutes(5)) //
311+
.usePooling().poolConfig(poolConfig) //
312+
.build();
313+
314+
connectionFactory = new JedisConnectionFactory(new RedisClusterConfiguration(), configuration);
315+
connectionFactory.afterPropertiesSet();
316+
317+
RedisClusterConnection connection = connectionFactory.getClusterConnection();
318+
assertThat(connection).isInstanceOf(JedisClusterConnection.class);
319+
320+
JedisCluster cluster = ((JedisClusterConnection) connection).getCluster();
321+
322+
JedisClusterConnectionHandler connectionHandler = (JedisClusterConnectionHandler) ReflectionTestUtils
323+
.getField(cluster, "connectionHandler");
324+
JedisClusterInfoCache cache = (JedisClusterInfoCache) ReflectionTestUtils.getField(connectionHandler, "cache");
325+
326+
assertThat(ReflectionTestUtils.getField(cache, "connectionTimeout")).isEqualTo(60000);
327+
assertThat(ReflectionTestUtils.getField(cache, "soTimeout")).isEqualTo(300000);
328+
assertThat(ReflectionTestUtils.getField(cache, "password")).isNull();
329+
assertThat(ReflectionTestUtils.getField(cache, "clientName")).isEqualTo("my-client");
330+
assertThat(ReflectionTestUtils.getField(cache, "ssl")).isEqualTo(true);
331+
assertThat(ReflectionTestUtils.getField(cache, "sslSocketFactory")).isEqualTo(socketFactory);
332+
assertThat(ReflectionTestUtils.getField(cache, "sslParameters")).isEqualTo(sslParameters);
333+
assertThat(ReflectionTestUtils.getField(cache, "hostnameVerifier")).isEqualTo(hostNameVerifier);
334+
assertThat(ReflectionTestUtils.getField(cache, "hostAndPortMap")).isNull();
335+
}
336+
290337
@Test(expected = IllegalStateException.class) // DATAREDIS-574
291338
public void shouldDenyChangesToImmutableClientConfiguration() throws NoSuchAlgorithmException {
292339

0 commit comments

Comments
 (0)