From f4c95ca2654d7150c88a871e061bb388b76f12e7 Mon Sep 17 00:00:00 2001 From: kvmw Date: Wed, 12 Aug 2026 17:19:56 +0200 Subject: [PATCH] fix(redis): set spring.data.redis.username from bound credentials Fixes #294 Signed-off-by: kvmw --- .../cfenv/spring/boot/RedisCfEnvProcessor.java | 2 ++ .../cfenv/spring/boot/RedisCfEnvProcessorTests.java | 11 +++++++++++ .../java/io/pivotal/cfenv/spring/boot/RedisTests.java | 2 +- .../spring/boot/test-redis-info-with-tls-port.json | 1 + .../io/pivotal/cfenv/spring/boot/test-redis-info.json | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java-cfenv-boot/src/main/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessor.java b/java-cfenv-boot/src/main/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessor.java index 22a0835b..054fd2cc 100644 --- a/java-cfenv-boot/src/main/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessor.java +++ b/java-cfenv-boot/src/main/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessor.java @@ -53,6 +53,7 @@ public void process(CfCredentials cfCredentials, Map properties) if (uri == null) { properties.put(PREFIX + ".host", cfCredentials.getHost()); + properties.put(PREFIX + ".username", cfCredentials.getUsername()); properties.put(PREFIX + ".password", cfCredentials.getPassword()); Optional tlsPort = Optional.ofNullable(cfCredentials.getString("tls_port")); @@ -66,6 +67,7 @@ public void process(CfCredentials cfCredentials, Map properties) UriInfo uriInfo = new UriInfo(uri); properties.put(PREFIX + ".host", uriInfo.getHost()); properties.put(PREFIX + ".port", uriInfo.getPort()); + properties.put(PREFIX + ".username", uriInfo.getUsername()); properties.put(PREFIX + ".password", uriInfo.getPassword()); if (uriInfo.getScheme().equals("rediss")) { properties.put(PREFIX + ".ssl.enabled", Boolean.TRUE); diff --git a/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessorTests.java b/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessorTests.java index 4df88ebf..b119c9b5 100644 --- a/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessorTests.java +++ b/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisCfEnvProcessorTests.java @@ -34,6 +34,7 @@ public class RedisCfEnvProcessorTests extends AbstractCfEnvTests { public static void commonAssertions(Environment environment, String SPRING_DATA_REDIS) { assertThat(environment.getProperty(SPRING_DATA_REDIS + ".host")).isEqualTo(hostname); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".port")).isEqualTo(String.valueOf(port)); + assertThat(environment.getProperty(SPRING_DATA_REDIS + ".username")).isEqualTo(username); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".password")).isEqualTo(password); } @@ -56,6 +57,7 @@ public void testRedisBootPropertiesWithTLSEnabledInCredentials() { assertThat(environment.getProperty(SPRING_DATA_REDIS + ".host")).isEqualTo(hostname); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".port")).isEqualTo(String.valueOf(TLS_PORT)); + assertThat(environment.getProperty(SPRING_DATA_REDIS + ".username")).isEqualTo(username); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".password")).isEqualTo(password); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".ssl.enabled")).isEqualTo("true"); } @@ -79,6 +81,7 @@ public void testNoCredentials() { assertThat(environment.getProperty(SPRING_DATA_REDIS + ".host")).isNull(); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".port")).isNull(); + assertThat(environment.getProperty(SPRING_DATA_REDIS + ".username")).isNull(); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".password")).isNull(); assertThat(environment.getProperty(SPRING_DATA_REDIS + ".ssl")).isNull(); } @@ -93,6 +96,7 @@ private RedisFilePayloadBuilder payloadBuilder(String filename) { return new RedisFilePayloadBuilder(filename) .withServiceName("redis-1") .withHostname(hostname) + .withUsername(username) .withPassword(password) .withPort(port) .withName("redis-db"); @@ -104,6 +108,7 @@ private class RedisFilePayloadBuilder { private String hostname; private Integer port; private Integer tlsPort; + private String username; private String password; private String name; @@ -126,6 +131,11 @@ RedisFilePayloadBuilder withPort(int port) { return this; } + RedisFilePayloadBuilder withUsername(String username) { + this.username = username; + return this; + } + RedisFilePayloadBuilder withPassword(String password) { this.password = password; return this; @@ -144,6 +154,7 @@ RedisFilePayloadBuilder withName(String name) { String payload() { return payload.replace("$serviceName", serviceName) .replace("$hostname", hostname) + .replace("$username", username) .replace("$port", String.valueOf(port)) .replace("$password", password) .replace("$tls_port", String.valueOf(tlsPort)) diff --git a/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisTests.java b/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisTests.java index 5db0ffe0..3556512a 100644 --- a/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisTests.java +++ b/java-cfenv-boot/src/test/java/io/pivotal/cfenv/spring/boot/RedisTests.java @@ -43,7 +43,7 @@ public void redisServiceCreation() { assertThat(cfServices).allMatch(cfService -> cfService.getLabel().equals("rediscloud")); assertThat(cfServices).allMatch( cfService -> cfService.getCredentials().getUriInfo("redis").getUriString() - .equals("redis://10.20.30.40:1234")); + .equals("redis://" + username + ":" + password + "@10.20.30.40:1234")); } diff --git a/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info-with-tls-port.json b/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info-with-tls-port.json index 9a8bbd04..17cf4008 100644 --- a/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info-with-tls-port.json +++ b/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info-with-tls-port.json @@ -6,6 +6,7 @@ "credentials": { "hostname": "$hostname", "port": "$port", + "username": "$username", "password": "$password", "tls_port": "$tls_port" } diff --git a/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info.json b/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info.json index 83103f32..7b7311b0 100644 --- a/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info.json +++ b/java-cfenv-boot/src/test/resources/io/pivotal/cfenv/spring/boot/test-redis-info.json @@ -6,6 +6,7 @@ "credentials": { "hostname": "$hostname", "port": "$port", + "username": "$username", "password": "$password" } } \ No newline at end of file