This is an automated email from the ASF dual-hosted git repository.

kimmking pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new fe56f1d  Decouple AuthenticationEngine and BackendConnection (#7038)
fe56f1d is described below

commit fe56f1d60a669e8d87757a8c901c84d1b7ee5b7c
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Aug 24 20:35:04 2020 +0800

    Decouple AuthenticationEngine and BackendConnection (#7038)
    
    * Decouple AuthenticationEngine and BackendConnection
    
    * Decouple AuthenticationEngine and BackendConnection
---
 .../jdbc/connection/BackendConnection.java         |  2 +-
 .../text/admin/ShowDatabasesBackendHandler.java    |  2 +-
 .../text/admin/UseDatabaseBackendHandler.java      |  2 +-
 .../admin/ShowDatabasesBackendHandlerTest.java     |  2 +-
 .../text/admin/ShowTablesBackendHandlerTest.java   |  2 +-
 .../text/admin/UseDatabaseBackendHandlerTest.java  |  2 +-
 .../netty/FrontendChannelInboundHandler.java       |  4 +--
 .../mysql/auth/MySQLAuthenticationEngine.java      | 15 +++--------
 .../admin/initdb/MySQLComInitDbExecutor.java       |  2 +-
 .../mysql/MySQLProtocolFrontendEngineTest.java     | 13 ++++------
 .../mysql/auth/MySQLAuthenticationEngineTest.java  | 24 ++++++++++++------
 .../auth/PostgreSQLAuthenticationEngine.java       | 29 ++++++++--------------
 .../frontend/engine/AuthenticationEngine.java      |  4 +--
 13 files changed, 46 insertions(+), 57 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnection.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnection.java
index 1e82f35..e559619 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnection.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnection.java
@@ -69,7 +69,7 @@ public final class BackendConnection implements 
JDBCExecutionConnection, AutoClo
     private int connectionId;
     
     @Setter
-    private String userName;
+    private String username;
     
     private final Multimap<String, Connection> cachedConnections = 
LinkedHashMultimap.create();
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandler.java
index 5f1e2ec..5aa4824 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandler.java
@@ -53,7 +53,7 @@ public final class ShowDatabasesBackendHandler implements 
TextProtocolBackendHan
     
     private Collection getSchemaNames() {
         Collection<String> result = new 
LinkedList<>(ProxySchemaContexts.getInstance().getSchemaNames());
-        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUserName()).getAuthorizedSchemas();
+        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUsername()).getAuthorizedSchemas();
         if (!authorizedSchemas.isEmpty()) {
             result.retainAll(authorizedSchemas);
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandler.java
index e8f07ba..9107d77 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandler.java
@@ -53,7 +53,7 @@ public final class UseDatabaseBackendHandler implements 
TextProtocolBackendHandl
     }
     
     private boolean isAuthorizedSchema(final String schema) {
-        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUserName()).getAuthorizedSchemas();
+        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUsername()).getAuthorizedSchemas();
         return authorizedSchemas.isEmpty() || 
authorizedSchemas.contains(schema);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandlerTest.java
index bf2abf7..7b3a6c2 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowDatabasesBackendHandlerTest.java
@@ -56,7 +56,7 @@ public final class ShowDatabasesBackendHandlerTest {
     @SneakyThrows(ReflectiveOperationException.class)
     public void setUp() {
         BackendConnection backendConnection = mock(BackendConnection.class);
-        when(backendConnection.getUserName()).thenReturn("root");
+        when(backendConnection.getUsername()).thenReturn("root");
         showDatabasesBackendHandler = new 
ShowDatabasesBackendHandler(backendConnection);
         Field schemaContexts = 
ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
         schemaContexts.setAccessible(true);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandlerTest.java
index e360bb4..7a2f3c2 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandlerTest.java
@@ -54,7 +54,7 @@ public class ShowTablesBackendHandlerTest {
     @SneakyThrows(ReflectiveOperationException.class)
     public void setUp() {
         BackendConnection backendConnection = mock(BackendConnection.class);
-        when(backendConnection.getUserName()).thenReturn("root");
+        when(backendConnection.getUsername()).thenReturn("root");
         tablesBackendHandler = new ShowTablesBackendHandler("show tables", 
mock(SQLStatement.class), backendConnection);
         Map<String, SchemaContext> schemaContextMap = getSchemaContextMap();
         when(backendConnection.getSchema()).thenReturn("schema_0");
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandlerTest.java
index ba6d35b..819492f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/UseDatabaseBackendHandlerTest.java
@@ -58,7 +58,7 @@ public final class UseDatabaseBackendHandlerTest {
     @SneakyThrows(ReflectiveOperationException.class)
     public void setUp() {
         backendConnection = mock(BackendConnection.class);
-        when(backendConnection.getUserName()).thenReturn("root");
+        when(backendConnection.getUsername()).thenReturn("root");
         Field schemaContexts = 
ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
         schemaContexts.setAccessible(true);
         schemaContexts.set(ProxySchemaContexts.getInstance(),
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
index 792921a..125dce1 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
@@ -78,9 +78,9 @@ public final class FrontendChannelInboundHandler extends 
ChannelInboundHandlerAd
     
     private boolean auth(final ChannelHandlerContext context, final ByteBuf 
message) {
         try (PacketPayload payload = 
databaseProtocolFrontendEngine.getCodecEngine().createPacketPayload(message)) {
-            AuthenticationResult authResult = 
databaseProtocolFrontendEngine.getAuthEngine().auth(context, payload, 
backendConnection);
+            AuthenticationResult authResult = 
databaseProtocolFrontendEngine.getAuthEngine().auth(context, payload);
             if (authResult.isFinished()) {
-                backendConnection.setUserName(authResult.getUsername());
+                backendConnection.setUsername(authResult.getUsername());
                 backendConnection.setCurrentSchema(authResult.getDatabase());
             }
             return authResult.isFinished();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngine.java
index 5eef035..c9e86b2 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngine.java
@@ -31,7 +31,6 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLHandsha
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLHandshakeResponse41Packet;
 import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
 import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
 import org.apache.shardingsphere.proxy.frontend.ConnectionIdGenerator;
 import org.apache.shardingsphere.proxy.frontend.engine.AuthenticationEngine;
@@ -65,7 +64,7 @@ public final class MySQLAuthenticationEngine implements 
AuthenticationEngine {
     }
     
     @Override
-    public AuthenticationResult auth(final ChannelHandlerContext context, 
final PacketPayload payload, final BackendConnection backendConnection) {
+    public AuthenticationResult auth(final ChannelHandlerContext context, 
final PacketPayload payload) {
         if (MySQLConnectionPhase.AUTH_PHASE_FAST_PATH == connectionPhase) {
             currentAuthResult = authPhaseFastPath(context, payload);
             if (!currentAuthResult.isFinished()) {
@@ -75,13 +74,7 @@ public final class MySQLAuthenticationEngine implements 
AuthenticationEngine {
             authenticationMethodMismatch((MySQLPacketPayload) payload);
         }
         Optional<MySQLServerErrorCode> errorCode = 
authenticationHandler.login(currentAuthResult.getUsername(), authResponse, 
currentAuthResult.getDatabase());
-        if (errorCode.isPresent()) {
-            context.writeAndFlush(createMySQLErrPacket(errorCode.get(), 
context));
-        } else {
-            
backendConnection.setCurrentSchema(currentAuthResult.getDatabase());
-            backendConnection.setUserName(currentAuthResult.getUsername());
-            context.writeAndFlush(new MySQLOKPacket(++sequenceId));
-        }
+        context.writeAndFlush(errorCode.isPresent() ? 
createErrorPacket(errorCode.get(), context) : new MySQLOKPacket(++sequenceId));
         return AuthenticationResult.finished(currentAuthResult.getUsername(), 
currentAuthResult.getDatabase());
     }
     
@@ -96,7 +89,7 @@ public final class MySQLAuthenticationEngine implements 
AuthenticationEngine {
         if (isClientPluginAuth(packet) && 
!MySQLAuthenticationMethod.SECURE_PASSWORD_AUTHENTICATION.getMethodName().equals(packet.getAuthPluginName()))
 {
             connectionPhase = 
MySQLConnectionPhase.AUTHENTICATION_METHOD_MISMATCH;
             context.writeAndFlush(new 
MySQLAuthSwitchRequestPacket(++sequenceId, 
MySQLAuthenticationMethod.SECURE_PASSWORD_AUTHENTICATION.getMethodName(), 
authenticationHandler.getAuthPluginData()));
-            return AuthenticationResult.continued();
+            return AuthenticationResult.continued(packet.getUsername(), 
packet.getDatabase());
         }
         return AuthenticationResult.finished(packet.getUsername(), 
packet.getDatabase());
     }
@@ -111,7 +104,7 @@ public final class MySQLAuthenticationEngine implements 
AuthenticationEngine {
         authResponse = packet.getAuthPluginResponse();
     }
     
-    private MySQLErrPacket createMySQLErrPacket(final MySQLServerErrorCode 
errorCode, final ChannelHandlerContext context) {
+    private MySQLErrPacket createErrorPacket(final MySQLServerErrorCode 
errorCode, final ChannelHandlerContext context) {
         return MySQLServerErrorCode.ER_DBACCESS_DENIED_ERROR == errorCode
                 ? new MySQLErrPacket(++sequenceId, 
MySQLServerErrorCode.ER_DBACCESS_DENIED_ERROR, currentAuthResult.getUsername(), 
getHostAddress(context), currentAuthResult.getDatabase())
                 : new MySQLErrPacket(++sequenceId, 
MySQLServerErrorCode.ER_ACCESS_DENIED_ERROR, currentAuthResult.getUsername(), 
getHostAddress(context), getErrorMessage());
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
index c83e35d..319e803 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
@@ -52,7 +52,7 @@ public final class MySQLComInitDbExecutor implements 
CommandExecutor {
     }
     
     private boolean isAuthorizedSchema(final String schema) {
-        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUserName()).getAuthorizedSchemas();
+        Collection<String> authorizedSchemas = 
ProxySchemaContexts.getInstance().getSchemaContexts().getAuthentication().getUsers().get(backendConnection.getUsername()).getAuthorizedSchemas();
         return authorizedSchemas.isEmpty() || 
authorizedSchemas.contains(schema);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLProtocolFrontendEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLProtocolFrontendEngineTest.java
index 5357a6a..9cc684e 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLProtocolFrontendEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLProtocolFrontendEngineTest.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.kernel.context.SchemaContexts;
 import org.apache.shardingsphere.kernel.context.StandardSchemaContexts;
 import org.apache.shardingsphere.kernel.context.runtime.RuntimeContext;
 import org.apache.shardingsphere.kernel.context.schema.ShardingSphereSchema;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
 import org.apache.shardingsphere.proxy.frontend.ConnectionIdGenerator;
 import org.apache.shardingsphere.proxy.frontend.engine.AuthenticationResult;
@@ -105,7 +104,7 @@ public final class MySQLProtocolFrontendEngineTest {
         ProxyUser proxyUser = new ProxyUser("", Collections.singleton("db1"));
         setAuthentication(proxyUser);
         when(payload.readStringNul()).thenReturn("root");
-        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload, 
mock(BackendConnection.class));
+        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload);
         assertThat(actual.getUsername(), is("root"));
         assertNull(actual.getDatabase());
         assertTrue(actual.isFinished());
@@ -121,7 +120,7 @@ public final class MySQLProtocolFrontendEngineTest {
         when(payload.readStringNulByBytes()).thenReturn("root".getBytes());
         when(channel.remoteAddress()).thenReturn(new 
InetSocketAddress("localhost", 3307));
         when(context.channel()).thenReturn(channel);
-        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload, 
mock(BackendConnection.class));
+        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload);
         assertThat(actual.getUsername(), is("root"));
         assertNull(actual.getDatabase());
         assertTrue(actual.isFinished());
@@ -138,12 +137,11 @@ public final class MySQLProtocolFrontendEngineTest {
         when(payload.readStringNulByBytes()).thenReturn("root".getBytes());
         when(context.channel()).thenReturn(channel);
         when(channel.remoteAddress()).thenReturn(new 
InetSocketAddress(InetAddress.getByAddress(new byte[] {(byte) 192, (byte) 168, 
(byte) 0, (byte) 102}), 3307));
-        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload, 
mock(BackendConnection.class));
+        AuthenticationResult actual = 
mysqlProtocolFrontendEngine.getAuthEngine().auth(context, payload);
         assertThat(actual.getUsername(), is("root"));
         assertNull(actual.getDatabase());
         assertTrue(actual.isFinished());
-        verify(context).writeAndFlush(argThat(
-                (ArgumentMatcher<MySQLErrPacket>) argument -> "Access denied 
for user 'root'@'192.168.0.102' (using password: 
YES)".equals(argument.getErrorMessage())));
+        
verify(context).writeAndFlush(argThat((ArgumentMatcher<MySQLErrPacket>) 
argument -> "Access denied for user 'root'@'192.168.0.102' (using password: 
YES)".equals(argument.getErrorMessage())));
     }
     
     @SneakyThrows
@@ -168,8 +166,7 @@ public final class MySQLProtocolFrontendEngineTest {
     }
     
     private SchemaContexts getSchemaContexts(final Authentication 
authentication) {
-        return new StandardSchemaContexts(getSchemaContextMap(), 
authentication,
-                new ConfigurationProperties(new Properties()), new 
MySQLDatabaseType());
+        return new StandardSchemaContexts(getSchemaContextMap(), 
authentication, new ConfigurationProperties(new Properties()), new 
MySQLDatabaseType());
     }
     
     private Map<String, SchemaContext> getSchemaContextMap() {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngineTest.java
index 7fd0802..6224e81 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationEngineTest.java
@@ -32,8 +32,8 @@ import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.kernel.context.SchemaContext;
 import org.apache.shardingsphere.kernel.context.StandardSchemaContexts;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
+import org.apache.shardingsphere.proxy.frontend.engine.AuthenticationResult;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -85,7 +85,7 @@ public final class MySQLAuthenticationEngineTest {
         MySQLPacketPayload payload = mock(MySQLPacketPayload.class);
         ChannelHandlerContext channelHandlerContext = 
mock(ChannelHandlerContext.class);
         
when(payload.readInt4()).thenReturn(MySQLCapabilityFlag.CLIENT_PLUGIN_AUTH.getValue());
-        authenticationEngine.auth(channelHandlerContext, payload, 
mock(BackendConnection.class));
+        authenticationEngine.auth(channelHandlerContext, payload);
         assertThat(getConnectionPhase(), 
is(MySQLConnectionPhase.AUTHENTICATION_METHOD_MISMATCH));
     }
     
@@ -95,17 +95,25 @@ public final class MySQLAuthenticationEngineTest {
         MySQLPacketPayload payload = mock(MySQLPacketPayload.class);
         ChannelHandlerContext channelHandlerContext = 
mock(ChannelHandlerContext.class);
         when(payload.readStringEOFByBytes()).thenReturn(authResponse);
-        authenticationEngine.auth(channelHandlerContext, payload, 
mock(BackendConnection.class));
+        setAuthenticationResult();
+        authenticationEngine.auth(channelHandlerContext, payload);
         assertThat(getAuthResponse(), is(authResponse));
     }
     
+    @SneakyThrows(ReflectiveOperationException.class)
+    private void setAuthenticationResult() {
+        Field field = 
MySQLAuthenticationEngine.class.getDeclaredField("currentAuthResult");
+        field.setAccessible(true);
+        field.set(authenticationEngine, AuthenticationResult.continued("root", 
"sharding_db"));
+    }
+    
     @Test
     public void assertAuthWithLoginFail() throws NoSuchFieldException, 
IllegalAccessException {
         setConnectionPhase(MySQLConnectionPhase.AUTH_PHASE_FAST_PATH);
         ChannelHandlerContext context = getContext();
         setSchemas();
         when(authenticationHandler.login(anyString(), any(), 
anyString())).thenReturn(Optional.of(MySQLServerErrorCode.ER_ACCESS_DENIED_ERROR));
-        authenticationEngine.auth(context, getPayload("root", "sharding_db", 
authResponse), mock(BackendConnection.class));
+        authenticationEngine.auth(context, getPayload("root", "sharding_db", 
authResponse));
         verify(context).writeAndFlush(any(MySQLErrPacket.class));
     }
     
@@ -114,7 +122,7 @@ public final class MySQLAuthenticationEngineTest {
         ChannelHandlerContext context = getContext();
         setSchemas();
         setConnectionPhase(MySQLConnectionPhase.AUTH_PHASE_FAST_PATH);
-        authenticationEngine.auth(context, getPayload("root", "ABSENT 
DATABASE", authResponse), mock(BackendConnection.class));
+        authenticationEngine.auth(context, getPayload("root", "ABSENT 
DATABASE", authResponse));
         verify(context).writeAndFlush(any(MySQLErrPacket.class));
     }
     
@@ -124,7 +132,7 @@ public final class MySQLAuthenticationEngineTest {
         ChannelHandlerContext context = getContext();
         when(authenticationHandler.login(anyString(), any(), 
anyString())).thenReturn(Optional.empty());
         setSchemas();
-        authenticationEngine.auth(context, getPayload("root", "sharding_db", 
authResponse), mock(BackendConnection.class));
+        authenticationEngine.auth(context, getPayload("root", "sharding_db", 
authResponse));
         verify(context).writeAndFlush(any(MySQLOKPacket.class));
     }
     
@@ -136,10 +144,10 @@ public final class MySQLAuthenticationEngineTest {
                         new Authentication(), new ConfigurationProperties(new 
Properties()), new MySQLDatabaseType()));
     }
     
-    private MySQLPacketPayload getPayload(final String userName, final String 
database, final byte[] authResponse) {
+    private MySQLPacketPayload getPayload(final String username, final String 
database, final byte[] authResponse) {
         MySQLPacketPayload result = mock(MySQLPacketPayload.class);
         
when(result.readInt4()).thenReturn(MySQLCapabilityFlag.CLIENT_CONNECT_WITH_DB.getValue());
-        when(result.readStringNul()).thenReturn(userName).thenReturn(database);
+        when(result.readStringNul()).thenReturn(username).thenReturn(database);
         when(result.readStringNulByBytes()).thenReturn(authResponse);
         return result;
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationEngine.java
index ce3aa8b..47c10dc 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationEngine.java
@@ -32,7 +32,6 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.Postgre
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLRandomGenerator;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLSSLNegativePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
 import org.apache.shardingsphere.proxy.frontend.ConnectionIdGenerator;
 import org.apache.shardingsphere.proxy.frontend.engine.AuthenticationEngine;
@@ -67,7 +66,7 @@ public final class PostgreSQLAuthenticationEngine implements 
AuthenticationEngin
     }
     
     @Override
-    public AuthenticationResult auth(final ChannelHandlerContext context, 
final PacketPayload payload, final BackendConnection backendConnection) {
+    public AuthenticationResult auth(final ChannelHandlerContext context, 
final PacketPayload payload) {
         if (SSL_REQUEST_PAYLOAD_LENGTH == 
payload.getByteBuf().markReaderIndex().readInt() && SSL_REQUEST_CODE == 
payload.getByteBuf().readInt()) {
             context.writeAndFlush(new PostgreSQLSSLNegativePacket());
             return AuthenticationResult.continued();
@@ -78,41 +77,35 @@ public final class PostgreSQLAuthenticationEngine 
implements AuthenticationEngin
             startupMessageReceived.set(true);
             String databaseName = 
comStartupPacket.getParametersMap().get(DATABASE_NAME_KEYWORD);
             if (!Strings.isNullOrEmpty(databaseName) && 
!ProxySchemaContexts.getInstance().schemaExists(databaseName)) {
-                PostgreSQLErrorResponsePacket responsePacket = 
createPostgreSQLErrorResponsePacket(PostgreSQLErrorCode.INVALID_CATALOG_NAME,
-                    String.format("database \"%s\" does not exist", 
databaseName));
+                PostgreSQLErrorResponsePacket responsePacket = 
createErrorPacket(PostgreSQLErrorCode.INVALID_CATALOG_NAME, 
String.format("database \"%s\" does not exist", databaseName));
                 context.writeAndFlush(responsePacket);
                 context.close();
                 return AuthenticationResult.continued();
             }
-            backendConnection.setCurrentSchema(databaseName);
-            String userName = 
comStartupPacket.getParametersMap().get(USER_NAME_KEYWORD);
-            if (null == userName || userName.isEmpty()) {
-                PostgreSQLErrorResponsePacket responsePacket = 
createPostgreSQLErrorResponsePacket(PostgreSQLErrorCode.SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION,
-                    "user not set in StartupMessage");
+            String username = 
comStartupPacket.getParametersMap().get(USER_NAME_KEYWORD);
+            if (null == username || username.isEmpty()) {
+                PostgreSQLErrorResponsePacket responsePacket = 
createErrorPacket(PostgreSQLErrorCode.SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION,
 "user not set in StartupMessage");
                 context.writeAndFlush(responsePacket);
                 context.close();
                 return AuthenticationResult.continued();
             }
-            backendConnection.setUserName(userName);
             md5Salt = 
PostgreSQLRandomGenerator.getInstance().generateRandomBytes(4);
             context.writeAndFlush(new 
PostgreSQLAuthenticationMD5PasswordPacket(md5Salt));
-            return AuthenticationResult.continued(userName, databaseName);
+            return AuthenticationResult.continued(username, databaseName);
         } else {
             char messageType = (char) ((PostgreSQLPacketPayload) 
payload).readInt1();
             if ('p' != messageType) {
-                PostgreSQLErrorResponsePacket responsePacket = 
createPostgreSQLErrorResponsePacket(PostgreSQLErrorCode.SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION,
-                    "PasswordMessage is expected, message type 'p', but not '" 
+ messageType + "'");
+                PostgreSQLErrorResponsePacket responsePacket = 
createErrorPacket(
+                        
PostgreSQLErrorCode.SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION, 
String.format("PasswordMessage is expected, message type 'p', but not '%s'", 
messageType));
                 context.writeAndFlush(responsePacket);
                 context.close();
                 currentAuthResult = AuthenticationResult.continued();
                 return currentAuthResult;
             }
             PostgreSQLPasswordMessagePacket passwordMessagePacket = new 
PostgreSQLPasswordMessagePacket((PostgreSQLPacketPayload) payload);
-            PostgreSQLLoginResult loginResult = 
PostgreSQLAuthenticationHandler.loginWithMd5Password(
-                backendConnection.getUserName(), 
backendConnection.getSchema(), md5Salt, passwordMessagePacket);
+            PostgreSQLLoginResult loginResult = 
PostgreSQLAuthenticationHandler.loginWithMd5Password(currentAuthResult.getUsername(),
 currentAuthResult.getDatabase(), md5Salt, passwordMessagePacket);
             if (PostgreSQLErrorCode.SUCCESSFUL_COMPLETION != 
loginResult.getErrorCode()) {
-                PostgreSQLErrorResponsePacket responsePacket = 
createPostgreSQLErrorResponsePacket(loginResult.getErrorCode(),
-                    loginResult.getErrorMessage());
+                PostgreSQLErrorResponsePacket responsePacket = 
createErrorPacket(loginResult.getErrorCode(), loginResult.getErrorMessage());
                 context.writeAndFlush(responsePacket);
                 context.close();
                 return AuthenticationResult.continued();
@@ -128,7 +121,7 @@ public final class PostgreSQLAuthenticationEngine 
implements AuthenticationEngin
         }
     }
     
-    private PostgreSQLErrorResponsePacket 
createPostgreSQLErrorResponsePacket(final PostgreSQLErrorCode errorCode, final 
String errorMessage) {
+    private PostgreSQLErrorResponsePacket createErrorPacket(final 
PostgreSQLErrorCode errorCode, final String errorMessage) {
         PostgreSQLErrorResponsePacket result = new 
PostgreSQLErrorResponsePacket();
         result.addField(PostgreSQLErrorResponsePacket.FIELD_TYPE_SEVERITY, 
"FATAL");
         result.addField(PostgreSQLErrorResponsePacket.FIELD_TYPE_CODE, 
errorCode.getErrorCode());
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/engine/AuthenticationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/engine/AuthenticationEngine.java
index dfa1f70..7f95ad4 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/engine/AuthenticationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-spi/src/main/java/org/apache/shardingsphere/proxy/frontend/engine/AuthenticationEngine.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.proxy.frontend.engine;
 
 import io.netty.channel.ChannelHandlerContext;
 import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 
 /**
  * Authentication engine.
@@ -39,8 +38,7 @@ public interface AuthenticationEngine {
      *
      * @param context channel handler context
      * @param payload packet payload
-     * @param backendConnection backend connection
      * @return authentication result
      */
-    AuthenticationResult auth(ChannelHandlerContext context, PacketPayload 
payload, BackendConnection backendConnection);
+    AuthenticationResult auth(ChannelHandlerContext context, PacketPayload 
payload);
 }

Reply via email to