diff --git a/pom.xml b/pom.xml
index 6e446970fc..c182bd0cfd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-redis
- 2.2.0.BUILD-SNAPSHOT
+ 2.2.0.DATAREDIS-975-SNAPSHOT
Spring Data Redis
diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java
index ea83951d00..af10766228 100644
--- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java
+++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java
@@ -58,7 +58,6 @@
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
/**
* Connection factory creating Jedis based connections.
@@ -425,12 +424,10 @@ protected JedisCluster createCluster(RedisClusterConfiguration clusterConfig, Ge
int redirects = clusterConfig.getMaxRedirects() != null ? clusterConfig.getMaxRedirects() : 5;
- int connectTimeout = getConnectTimeout();
- int readTimeout = getReadTimeout();
-
- return StringUtils.hasText(getPassword())
- ? new JedisCluster(hostAndPort, connectTimeout, readTimeout, redirects, getPassword(), poolConfig)
- : new JedisCluster(hostAndPort, connectTimeout, readTimeout, redirects, poolConfig);
+ return new JedisCluster(hostAndPort, getConnectTimeout(), getReadTimeout(), redirects, getPassword(),
+ clientConfiguration.getClientName().orElse(null), poolConfig, isUseSsl(),
+ clientConfiguration.getSslSocketFactory().orElse(null), clientConfiguration.getSslParameters().orElse(null),
+ clientConfiguration.getHostnameVerifier().orElse(null), null);
}
/*
diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java
index 8252ffc283..139eb96e13 100644
--- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java
+++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java
@@ -19,6 +19,8 @@
import static org.mockito.Mockito.*;
import redis.clients.jedis.JedisCluster;
+import redis.clients.jedis.JedisClusterConnectionHandler;
+import redis.clients.jedis.JedisClusterInfoCache;
import redis.clients.jedis.JedisPoolConfig;
import sun.net.www.protocol.https.DefaultHostnameVerifier;
@@ -27,6 +29,7 @@
import java.time.Duration;
import java.time.temporal.ChronoUnit;
+import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocketFactory;
@@ -34,6 +37,7 @@
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
+import org.springframework.data.redis.connection.RedisClusterConnection;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
@@ -287,6 +291,49 @@ public void shouldReturnClusterConfiguration() {
assertThat(connectionFactory.getClusterConfiguration()).isSameAs(configuration);
}
+ @Test // DATAREDIS-975
+ public void shouldApplySslConfigWhenCreatingClusterClient() throws NoSuchAlgorithmException {
+
+ SSLParameters sslParameters = new SSLParameters();
+ SSLContext context = SSLContext.getDefault();
+ SSLSocketFactory socketFactory = context.getSocketFactory();
+ JedisPoolConfig poolConfig = new JedisPoolConfig();
+ HostnameVerifier hostNameVerifier = new DefaultHostnameVerifier();
+
+ JedisClientConfiguration configuration = JedisClientConfiguration.builder() //
+ .useSsl() //
+ .hostnameVerifier(hostNameVerifier) //
+ .sslParameters(sslParameters) //
+ .sslSocketFactory(socketFactory).and() //
+ .clientName("my-client") //
+ .connectTimeout(Duration.ofMinutes(1)) //
+ .readTimeout(Duration.ofMinutes(5)) //
+ .usePooling().poolConfig(poolConfig) //
+ .build();
+
+ connectionFactory = new JedisConnectionFactory(new RedisClusterConfiguration(), configuration);
+ connectionFactory.afterPropertiesSet();
+
+ RedisClusterConnection connection = connectionFactory.getClusterConnection();
+ assertThat(connection).isInstanceOf(JedisClusterConnection.class);
+
+ JedisCluster cluster = ((JedisClusterConnection) connection).getCluster();
+
+ JedisClusterConnectionHandler connectionHandler = (JedisClusterConnectionHandler) ReflectionTestUtils
+ .getField(cluster, "connectionHandler");
+ JedisClusterInfoCache cache = (JedisClusterInfoCache) ReflectionTestUtils.getField(connectionHandler, "cache");
+
+ assertThat(ReflectionTestUtils.getField(cache, "connectionTimeout")).isEqualTo(60000);
+ assertThat(ReflectionTestUtils.getField(cache, "soTimeout")).isEqualTo(300000);
+ assertThat(ReflectionTestUtils.getField(cache, "password")).isNull();
+ assertThat(ReflectionTestUtils.getField(cache, "clientName")).isEqualTo("my-client");
+ assertThat(ReflectionTestUtils.getField(cache, "ssl")).isEqualTo(true);
+ assertThat(ReflectionTestUtils.getField(cache, "sslSocketFactory")).isEqualTo(socketFactory);
+ assertThat(ReflectionTestUtils.getField(cache, "sslParameters")).isEqualTo(sslParameters);
+ assertThat(ReflectionTestUtils.getField(cache, "hostnameVerifier")).isEqualTo(hostNameVerifier);
+ assertThat(ReflectionTestUtils.getField(cache, "hostAndPortMap")).isNull();
+ }
+
@Test(expected = IllegalStateException.class) // DATAREDIS-574
public void shouldDenyChangesToImmutableClientConfiguration() throws NoSuchAlgorithmException {