From 948cbb121d464f326dd7c7e6e3843cf625d21ff4 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 16 Mar 2020 12:15:37 +0300 Subject: [PATCH] Feature - username parameter added. #2634 --- .../redisson/client/RedisClientConfig.java | 16 ++++-- .../client/handler/BaseConnectionHandler.java | 7 ++- .../java/org/redisson/config/BaseConfig.java | 49 ++++++++++++++++--- .../MasterSlaveConnectionManager.java | 2 + .../connection/SingleConnectionManager.java | 1 + .../connection/pool/ConnectionPool.java | 36 +++++--------- 6 files changed, 74 insertions(+), 37 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/RedisClientConfig.java b/redisson/src/main/java/org/redisson/client/RedisClientConfig.java index 9850f7e61..3f9afe15f 100644 --- a/redisson/src/main/java/org/redisson/client/RedisClientConfig.java +++ b/redisson/src/main/java/org/redisson/client/RedisClientConfig.java @@ -45,7 +45,8 @@ public class RedisClientConfig { private Class socketChannelClass = NioSocketChannel.class; private int connectTimeout = 10000; private int commandTimeout = 10000; - + + private String username; private String password; private int database; private String clientName; @@ -80,6 +81,7 @@ public class RedisClientConfig { this.connectTimeout = config.connectTimeout; this.commandTimeout = config.commandTimeout; this.password = config.password; + this.username = config.username; this.database = config.database; this.clientName = config.clientName; this.readOnly = config.readOnly; @@ -312,7 +314,13 @@ public class RedisClientConfig { this.resolverGroup = resolverGroup; return this; } - - - + + public String getUsername() { + return username; + } + public RedisClientConfig setUsername(String username) { + this.username = username; + return this; + } + } diff --git a/redisson/src/main/java/org/redisson/client/handler/BaseConnectionHandler.java b/redisson/src/main/java/org/redisson/client/handler/BaseConnectionHandler.java index ce0f34b07..4c00e23dd 100644 --- a/redisson/src/main/java/org/redisson/client/handler/BaseConnectionHandler.java +++ b/redisson/src/main/java/org/redisson/client/handler/BaseConnectionHandler.java @@ -65,7 +65,12 @@ public abstract class BaseConnectionHandler extends C RedisClientConfig config = redisClient.getConfig(); if (config.getPassword() != null) { - RFuture future = connection.async(RedisCommands.AUTH, config.getPassword()); + RFuture future; + if (config.getUsername() != null) { + future = connection.async(RedisCommands.AUTH, config.getUsername(), config.getPassword()); + } else { + future = connection.async(RedisCommands.AUTH, config.getPassword()); + } futures.add(future); } if (config.getDatabase() != 0) { diff --git a/redisson/src/main/java/org/redisson/config/BaseConfig.java b/redisson/src/main/java/org/redisson/config/BaseConfig.java index b99450f1f..0250b193f 100644 --- a/redisson/src/main/java/org/redisson/config/BaseConfig.java +++ b/redisson/src/main/java/org/redisson/config/BaseConfig.java @@ -69,6 +69,8 @@ public class BaseConfig> { */ private String password; + private String username; + /** * Subscriptions per Redis connection limit */ @@ -103,6 +105,7 @@ public class BaseConfig> { BaseConfig(T config) { setPassword(config.getPassword()); + setUsername(config.getUsername()); setSubscriptionsPerConnection(config.getSubscriptionsPerConnection()); setRetryAttempts(config.getRetryAttempts()); setRetryInterval(config.getRetryInterval()); @@ -124,7 +127,8 @@ public class BaseConfig> { /** * Subscriptions per Redis connection limit - * Default is 5 + *

+ * Default is 5 * * @param subscriptionsPerConnection amount * @return config @@ -139,7 +143,8 @@ public class BaseConfig> { } /** - * Password for Redis authentication. Should be null if not needed + * Password for Redis authentication. Should be null if not needed. + *

* Default is null * * @param password for connection @@ -154,6 +159,25 @@ public class BaseConfig> { return password; } + /** + * Username for Redis authentication. Should be null if not needed + *

+ * Default is null + *

+ * Requires Redis 6.0+ + * + * @param username for connection + * @return config + */ + public T setUsername(String username) { + this.username = username; + return (T) this; + } + + public String getUsername() { + return username; + } + /** * Error will be thrown if Redis command can't be sent to Redis server after retryAttempts. * But if it sent successfully then timeout will be started. @@ -176,7 +200,6 @@ public class BaseConfig> { /** * Defines time interval for another one attempt send Redis command * if it hasn't been sent already. - * *

* Default is 1500 milliseconds * @@ -212,6 +235,8 @@ public class BaseConfig> { /** * Setup connection name during connection init * via CLIENT SETNAME command + *

+ * Default is null * * @param clientName - name of client * @return config @@ -313,7 +338,7 @@ public class BaseConfig> { /** * Defines SSL provider used to handle SSL connections. *

- * Default is JDK + * Default is JDK * * @param sslProvider - ssl provider * @return config @@ -329,7 +354,9 @@ public class BaseConfig> { /** * Defines path to SSL truststore - * + *

+ * Default is null + * * @param sslTruststore - path * @return config */ @@ -344,7 +371,9 @@ public class BaseConfig> { /** * Defines password for SSL truststore - * + *

+ * Default is null + * * @param sslTruststorePassword - password * @return config */ @@ -359,7 +388,9 @@ public class BaseConfig> { /** * Defines path to SSL keystore - * + *

+ * Default is null + * * @param sslKeystore - path to keystore * @return config */ @@ -374,7 +405,9 @@ public class BaseConfig> { /** * Defines password for SSL keystore - * + *

+ * Default is null + * * @param sslKeystorePassword - password * @return config */ diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 417c0f529..33485c656 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -414,6 +414,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { c.setPingTimeout(cfg.getPingTimeout()); c.setLoadBalancer(cfg.getLoadBalancer()); c.setPassword(cfg.getPassword()); + c.setUsername(cfg.getUsername()); c.setClientName(cfg.getClientName()); c.setMasterConnectionPoolSize(cfg.getMasterConnectionPoolSize()); c.setSlaveConnectionPoolSize(cfg.getSlaveConnectionPoolSize()); @@ -483,6 +484,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { .setPingConnectionInterval(config.getPingConnectionInterval()) .setKeepAlive(config.isKeepAlive()) .setTcpNoDelay(config.isTcpNoDelay()) + .setUsername(config.getUsername()) .setPassword(config.getPassword()) .setNettyHook(cfg.getNettyHook()); diff --git a/redisson/src/main/java/org/redisson/connection/SingleConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SingleConnectionManager.java index 18c211595..4b48140ca 100644 --- a/redisson/src/main/java/org/redisson/connection/SingleConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SingleConnectionManager.java @@ -50,6 +50,7 @@ public class SingleConnectionManager extends MasterSlaveConnectionManager { newconfig.setTimeout(cfg.getTimeout()); newconfig.setPingTimeout(cfg.getPingTimeout()); newconfig.setPassword(cfg.getPassword()); + newconfig.setUsername(cfg.getUsername()); newconfig.setDatabase(cfg.getDatabase()); newconfig.setClientName(cfg.getClientName()); newconfig.setMasterAddress(cfg.getAddress()); diff --git a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java index 59d72dacc..0ee35d2b9 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -15,15 +15,8 @@ */ package org.redisson.connection.pool; -import java.net.InetSocketAddress; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.BiConsumer; - +import io.netty.util.Timeout; +import io.netty.util.TimerTask; import org.redisson.api.NodeType; import org.redisson.api.RFuture; import org.redisson.client.RedisConnection; @@ -40,8 +33,14 @@ import org.redisson.misc.RedissonPromise; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.netty.util.Timeout; -import io.netty.util.TimerTask; +import java.net.InetSocketAddress; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiConsumer; /** * Base connection pool class @@ -416,24 +415,13 @@ abstract class ConnectionPool { } }; - if (entry.getConfig().getPassword() != null) { - RFuture temp = c.async(RedisCommands.AUTH, config.getPassword()); - temp.onComplete((res, ex) -> { - ping(c, pingListener); - }); - } else { - ping(c, pingListener); - } + RFuture f = c.async(RedisCommands.PING); + f.onComplete(pingListener); }); } }, config.getFailedSlaveReconnectionInterval(), TimeUnit.MILLISECONDS); } - private void ping(RedisConnection c, BiConsumer pingListener) { - RFuture f = c.async(RedisCommands.PING); - f.onComplete(pingListener); - } - public void returnConnection(ClientConnectionsEntry entry, T connection) { if (entry.isFreezed() && entry.getFreezeReason() != FreezeReason.SYSTEM) { connection.closeAsync();