diff --git a/src/main/java/io/lettuce/core/RedisURI.java b/src/main/java/io/lettuce/core/RedisURI.java index 62e7327a01..3716595351 100644 --- a/src/main/java/io/lettuce/core/RedisURI.java +++ b/src/main/java/io/lettuce/core/RedisURI.java @@ -567,17 +567,23 @@ private static RedisURI buildRedisUriFromUri(URI uri) { if (isNotEmpty(userInfo)) { String password = userInfo; + String username = null; if (password.startsWith(":")) { password = password.substring(1); } else { int index = password.indexOf(':'); if (index > 0) { + username = password.substring(0, index); password = password.substring(index + 1); } } if (LettuceStrings.isNotEmpty(password)) { - builder.withPassword(password); + if(username == null) { + builder.withPassword(password); + } else { + builder.withAuthentication(username, password); + } } } @@ -654,6 +660,9 @@ private String getAuthority(String scheme) { if (password != null && password.length != 0) { authority = urlEncode(new String(password)) + "@" + authority; } + if (username != null) { + authority = urlEncode(username) + ":" + authority; + } return authority; } diff --git a/src/test/java/io/lettuce/core/RedisURIBuilderUnitTests.java b/src/test/java/io/lettuce/core/RedisURIBuilderUnitTests.java index 268cd2201e..a4f1994191 100644 --- a/src/test/java/io/lettuce/core/RedisURIBuilderUnitTests.java +++ b/src/test/java/io/lettuce/core/RedisURIBuilderUnitTests.java @@ -112,15 +112,18 @@ void redisFromUrl() { void redisFromUrlNoPassword() { RedisURI redisURI = RedisURI.create("redis://localhost:1234/5"); assertThat(redisURI.getPassword()).isNull(); + assertThat(redisURI.getUsername()).isNull(); redisURI = RedisURI.create("redis://h:@localhost.com:14589"); assertThat(redisURI.getPassword()).isNull(); + assertThat(redisURI.getUsername()).isNull(); } @Test void redisFromUrlPassword() { RedisURI redisURI = RedisURI.create("redis://h:password@localhost.com:14589"); assertThat(redisURI.getPassword()).isEqualTo("password".toCharArray()); + assertThat(redisURI.getUsername()).isEqualTo("h"); } @Test @@ -141,6 +144,7 @@ void redisSslFromUrl() { assertThat(result.getHost()).isEqualTo("localhost"); assertThat(result.getPort()).isEqualTo(RedisURI.DEFAULT_REDIS_PORT); assertThat(result.getPassword()).isEqualTo("password".toCharArray()); + assertThat(result.getUsername()).isNull(); assertThat(result.isSsl()).isTrue(); }