You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2017/10/24 21:39:47 UTC

[geode] 01/01: GEODE-3705: Refactor code to process authentication message as per normal message framework

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

udo pushed a commit to branch feature/GEODE-3705
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 2f6067588fb57bfbe6368fcc31cc31d021fe77c2
Author: kohlmu-pivotal <uk...@pivotal.io>
AuthorDate: Thu Oct 19 15:46:21 2017 -0700

    GEODE-3705: Refactor code to process authentication message as per normal message framework
---
 .../distributed/internal/InternalLocator.java      |   1 -
 .../distributed/internal/tcpserver/TcpServer.java  |   6 +-
 .../protocol}/ClientProtocolProcessor.java         |   2 +-
 .../protocol}/ClientProtocolService.java           |   2 +-
 .../protocol}/ClientProtocolServiceLoader.java     |   4 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  | 119 ++++++++++-----------
 .../sockets/GenericProtocolServerConnection.java   |   9 +-
 .../tier/sockets/ServerConnectionFactory.java      |   3 +
 .../cache/tier/sockets/TcpServerFactory.java       |   1 +
 .../ClientProtocolMessageHandler.java              |   9 +-
 .../{protobuf => }/EncodingTypeTranslator.java     |   3 +-
 .../internal/protocol/{protobuf => }/Failure.java  |   3 +-
 .../MessageExecutionContext.java                   |  69 ++++++++----
 .../protocol/{protobuf => }/OperationContext.java  |   7 +-
 .../internal/protocol/ProtobufCachePipeline.java   |  78 --------------
 .../internal/protocol/ProtobufProtocolService.java | 103 ------------------
 .../protocol/{protobuf => }/ProtocolErrorCode.java |   5 +-
 .../internal/protocol/{protobuf => }/Result.java   |   3 +-
 .../internal/protocol/{protobuf => }/Success.java  |   3 +-
 .../protocol/operations/OperationHandler.java      |   6 +-
 .../ProtobufCachePipeline.java}                    |  36 ++++---
 .../{ => protobuf}/ProtobufLocatorPipeline.java    |  13 ++-
 .../protocol/protobuf/ProtobufOpsProcessor.java    |  70 ++++++------
 .../protocol/protobuf/ProtobufProtocolService.java |  69 ++++++++++++
 .../protobuf/ProtobufSerializationService.java     |   1 +
 .../protocol/protobuf/ProtobufStreamProcessor.java |  12 +--
 .../operations/GetAllRequestOperationHandler.java  |  16 +--
 .../GetAvailableServersOperationHandler.java       |  10 +-
 .../GetRegionNamesRequestOperationHandler.java     |  10 +-
 .../GetRegionRequestOperationHandler.java          |  14 +--
 .../operations/GetRequestOperationHandler.java     |  15 ++-
 .../operations/PutAllRequestOperationHandler.java  |  16 +--
 .../operations/PutRequestOperationHandler.java     |  14 +--
 .../operations/RemoveRequestOperationHandler.java  |  14 +--
 .../AuthenticationRequestOperationHandler.java     |  86 +++++++++++++++
 ....java => ProtobufOperationContextRegistry.java} |  14 ++-
 .../security/InvalidConfigAuthenticator.java       |  24 ++---
 .../security/ProtobufShiroAuthenticator.java       |  71 ++----------
 .../protobuf/security/ProtobufShiroAuthorizer.java |   8 +-
 ...mpatibleAuthenticationMechanismsException.java} |  10 +-
 .../AuthenticationSecurityProcessor.java           |  34 ++++++
 .../statistics/ProtobufClientStatisticsImpl.java   |  15 ++-
 .../utilities/ProtobufResponseUtilities.java       |   4 +-
 .../protobuf/utilities/ProtobufUtilities.java      |   8 +-
 .../{protobuf => }/security/Authenticator.java     |  21 ++--
 .../{protobuf => }/security/Authorizer.java        |   4 +-
 .../{protobuf => }/security/NoOpAuthenticator.java |  12 +--
 .../{protobuf => }/security/NoOpAuthorizer.java    |   4 +-
 .../protocol/security/SecurityLookupService.java   |  97 +++++++++++++++++
 .../SecurityProcessor.java}                        |  13 ++-
 .../AuthorizationSecurityProcessor.java}           |  18 ++--
 .../NoAuthenticationSecurityProcessor.java}        |  35 ++----
 .../{protobuf => }/statistics/NoOpStatistics.java  |   4 +-
 .../ProtocolClientStatistics.java}                 |   8 +-
 geode-protobuf/src/main/proto/clientProtocol.proto |   4 +-
 ...nal.cache.client.protocol.ClientProtocolService |   1 +
 ...ternal.cache.tier.sockets.ClientProtocolService |   1 -
 .../GenericProtocolServerConnectionTest.java       |   3 +-
 .../protocol/AuthenticationIntegrationTest.java    |  25 ++---
 .../protocol/AuthorizationIntegrationTest.java     |   7 +-
 .../ProtobufTestExecutionContext.java              |  25 ++---
 .../acceptance/CacheConnectionJUnitTest.java       |   6 +-
 .../acceptance/CacheOperationsJUnitTest.java       |   5 +-
 .../acceptance/LocatorConnectionDUnitTest.java     |   6 +-
 ...TypeToSerializationTypeTranslatorJUnitTest.java |   1 +
 .../ProtobufProtocolServiceJUnitTest.java          |   9 +-
 .../ProtobufShiroAuthenticatorJUnitTest.java       |  44 ++++----
 .../protobuf/ProtobufStreamProcessorTest.java      |   9 +-
 .../GetAllRequestOperationHandlerJUnitTest.java    |  14 +--
 ...tAvailableServersOperationHandlerJUnitTest.java |  26 +++--
 ...egionNamesRequestOperationHandlerJUnitTest.java |  25 +++--
 .../GetRegionRequestOperationHandlerJUnitTest.java |  13 +--
 .../GetRequestOperationHandlerJUnitTest.java       |  20 ++--
 .../PutAllRequestOperationHandlerJUnitTest.java    |  12 +--
 .../PutRequestOperationHandlerJUnitTest.java       |  27 ++---
 .../RemoveRequestOperationHandlerJUnitTest.java    |  18 ++--
 76 files changed, 814 insertions(+), 723 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
index 9b0ad22..06603cc 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
@@ -62,7 +62,6 @@ import org.apache.geode.distributed.internal.tcpserver.TcpServer;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolService;
 import org.apache.geode.internal.cache.tier.sockets.TcpServerFactory;
 import org.apache.geode.internal.cache.wan.WANServiceProvider;
 import org.apache.geode.internal.i18n.LocalizedStrings;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
index 34a34d6..a673c03 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
@@ -59,9 +59,9 @@ import org.apache.geode.internal.VersionedDataInputStream;
 import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolService;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolServiceLoader;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolService;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolServiceLoader;
 import org.apache.geode.internal.cache.tier.sockets.HandShake;
 import org.apache.geode.internal.cache.tier.sockets.ServiceLoadingFailureException;
 import org.apache.geode.internal.logging.LogService;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolProcessor.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolProcessor.java
rename to geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolProcessor.java
index 30b4baf..e49f16f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolProcessor.java
@@ -13,7 +13,7 @@
  * the License.
  */
 
-package org.apache.geode.internal.cache.tier.sockets;
+package org.apache.geode.internal.cache.client.protocol;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolService.java
rename to geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
index 544f286..7f50c9f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolService.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
@@ -13,7 +13,7 @@
  * the License.
  */
 
-package org.apache.geode.internal.cache.tier.sockets;
+package org.apache.geode.internal.cache.client.protocol;
 
 import org.apache.geode.StatisticsFactory;
 import org.apache.geode.cache.Cache;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolServiceLoader.java b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
similarity index 93%
rename from geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolServiceLoader.java
rename to geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
index 8b069ad..c7ba6e0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolServiceLoader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
@@ -13,12 +13,14 @@
  * the License.
  */
 
-package org.apache.geode.internal.cache.tier.sockets;
+package org.apache.geode.internal.cache.client.protocol;
 
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ServiceLoader;
 
+import org.apache.geode.internal.cache.tier.sockets.ServiceLoadingFailureException;
+
 public class ClientProtocolServiceLoader {
   private final List<ClientProtocolService> clientProtocolServices;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
index 59ef466..2dea63e 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
@@ -336,72 +336,24 @@ public class AcceptorImpl implements Acceptor, Runnable, CommBufferPool {
     this.isGatewayReceiver = isGatewayReceiver;
     this.gatewayTransportFilters = transportFilter;
     this.serverConnectionFactory = serverConnectionFactory;
-    {
-      int tmp_maxConnections = maxConnections;
-      if (tmp_maxConnections < MINIMUM_MAX_CONNECTIONS) {
-        tmp_maxConnections = MINIMUM_MAX_CONNECTIONS;
-      }
-      this.maxConnections = tmp_maxConnections;
-    }
-    {
-      int tmp_maxThreads = maxThreads;
-      if (maxThreads == CacheServer.DEFAULT_MAX_THREADS) {
-        // consult system properties for 5.0.2 backwards compatibility
-        if (DEPRECATED_SELECTOR) {
-          tmp_maxThreads = DEPRECATED_SELECTOR_POOL_SIZE;
-        }
-      }
-      if (tmp_maxThreads < 0) {
-        tmp_maxThreads = 0;
-      } else if (tmp_maxThreads > this.maxConnections) {
-        tmp_maxThreads = this.maxConnections;
-      }
-      boolean isWindows = false;
-      String os = System.getProperty("os.name");
-      if (os != null) {
-        if (os.indexOf("Windows") != -1) {
-          isWindows = true;
-        }
-      }
-      if (tmp_maxThreads > 0 && isWindows) {
-        // bug #40472 and JDK bug 6230761 - NIO can't be used with IPv6 on Windows
-        if (getBindAddress() instanceof Inet6Address) {
-          logger.warn(LocalizedMessage
-              .create(LocalizedStrings.AcceptorImpl_IGNORING_MAX_THREADS_DUE_TO_JROCKIT_NIO_BUG));
-          tmp_maxThreads = 0;
-        }
-        // bug #40198 - Selector.wakeup() hangs if VM starts to exit
-        if (isJRockit) {
-          logger.warn(LocalizedMessage
-              .create(LocalizedStrings.AcceptorImpl_IGNORING_MAX_THREADS_DUE_TO_WINDOWS_IPV6_BUG));
-          tmp_maxThreads = 0;
-        }
-      }
-      this.maxThreads = tmp_maxThreads;
-    }
-    {
-      Selector tmp_s = null;
-      // Selector tmp2_s = null;
-      LinkedBlockingQueue tmp_q = null;
-      LinkedBlockingQueue tmp_commQ = null;
-      HashSet tmp_hs = null;
-      SystemTimer tmp_timer = null;
-      if (isSelector()) {
-        tmp_s = Selector.open(); // no longer catch ex to fix bug 36907
-        // tmp2_s = Selector.open(); // workaround for bug 39624
-        tmp_q = new LinkedBlockingQueue();
-        tmp_commQ = new LinkedBlockingQueue();
-        tmp_hs = new HashSet(512);
-        tmp_timer = new SystemTimer(internalCache.getDistributedSystem(), true);
-      }
-      this.selector = tmp_s;
-      // this.tmpSel = tmp2_s;
-      this.selectorQueue = tmp_q;
-      this.commBufferQueue = tmp_commQ;
-      this.selectorRegistrations = tmp_hs;
-      this.hsTimer = tmp_timer;
-      this.tcpNoDelay = tcpNoDelay;
+
+    this.maxConnections = Math.min(maxConnections, MINIMUM_MAX_CONNECTIONS);
+    this.maxThreads = calculateMaxThreads(maxThreads);
+
+    if (isSelector()) {
+      this.selector = Selector.open();
+      this.selectorQueue = new LinkedBlockingQueue();
+      this.commBufferQueue = new LinkedBlockingQueue();
+      this.selectorRegistrations = new HashSet(512);
+      this.hsTimer = new SystemTimer(internalCache.getDistributedSystem(), true);
+    } else {
+      this.selector = null;
+      this.selectorQueue = null;
+      this.commBufferQueue = null;
+      this.selectorRegistrations = null;
+      this.hsTimer = null;
     }
+    this.tcpNoDelay = tcpNoDelay;
 
     {
       if (!isGatewayReceiver) {
@@ -633,6 +585,43 @@ public class AcceptorImpl implements Acceptor, Runnable, CommBufferPool {
         (postAuthzFactoryName != null && postAuthzFactoryName.length() > 0) ? true : false;
   }
 
+  private int calculateMaxThreads(int maxThreads) throws IOException {
+    int tmp_maxThreads = maxThreads;
+    if (maxThreads == CacheServer.DEFAULT_MAX_THREADS) {
+      // consult system properties for 5.0.2 backwards compatibility
+      if (DEPRECATED_SELECTOR) {
+        tmp_maxThreads = DEPRECATED_SELECTOR_POOL_SIZE;
+      }
+    }
+    if (tmp_maxThreads < 0) {
+      tmp_maxThreads = 0;
+    } else if (tmp_maxThreads > this.maxConnections) {
+      tmp_maxThreads = this.maxConnections;
+    }
+    boolean isWindows = false;
+    String os = System.getProperty("os.name");
+    if (os != null) {
+      if (os.indexOf("Windows") != -1) {
+        isWindows = true;
+      }
+    }
+    if (tmp_maxThreads > 0 && isWindows) {
+      // bug #40472 and JDK bug 6230761 - NIO can't be used with IPv6 on Windows
+      if (getBindAddress() instanceof Inet6Address) {
+        logger.warn(LocalizedMessage
+            .create(LocalizedStrings.AcceptorImpl_IGNORING_MAX_THREADS_DUE_TO_JROCKIT_NIO_BUG));
+        tmp_maxThreads = 0;
+      }
+      // bug #40198 - Selector.wakeup() hangs if VM starts to exit
+      if (isJRockit) {
+        logger.warn(LocalizedMessage
+            .create(LocalizedStrings.AcceptorImpl_IGNORING_MAX_THREADS_DUE_TO_WINDOWS_IPV6_BUG));
+        tmp_maxThreads = 0;
+      }
+    }
+    return tmp_maxThreads;
+  }
+
   public long getAcceptorId() {
     return this.acceptorId;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnection.java
index 5be6cac..8063bf0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnection.java
@@ -28,6 +28,7 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
 import org.apache.geode.internal.cache.tier.Acceptor;
 import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
@@ -38,7 +39,7 @@ import org.apache.geode.internal.security.SecurityService;
  */
 public class GenericProtocolServerConnection extends ServerConnection {
   // The new protocol lives in a separate module and gets loaded when this class is instantiated.
-  private final ClientProtocolProcessor protocolPipeline;
+  private final ClientProtocolProcessor protocolProcessor;
   private boolean cleanedUp;
   private ClientProxyMembershipID clientProxyMembershipID;
 
@@ -52,7 +53,7 @@ public class GenericProtocolServerConnection extends ServerConnection {
       SecurityService securityService) {
     super(socket, c, helper, stats, hsTimeout, socketBufferSize, communicationModeStr,
         communicationMode, acceptor, securityService);
-    this.protocolPipeline = clientProtocolProcessor;
+    this.protocolProcessor = clientProtocolProcessor;
 
     setClientProxyMembershipId();
 
@@ -66,7 +67,7 @@ public class GenericProtocolServerConnection extends ServerConnection {
       InputStream inputStream = socket.getInputStream();
       OutputStream outputStream = socket.getOutputStream();
 
-      protocolPipeline.processMessage(inputStream, outputStream);
+      protocolProcessor.processMessage(inputStream, outputStream);
     } catch (EOFException e) {
       this.setFlagProcessMessagesAsFalse();
       setClientDisconnectedException(e);
@@ -94,7 +95,7 @@ public class GenericProtocolServerConnection extends ServerConnection {
     synchronized (this) {
       if (!cleanedUp) {
         cleanedUp = true;
-        protocolPipeline.close();
+        protocolProcessor.close();
       }
     }
     return super.cleanup();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
index 5f0757f..a6fc973 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
@@ -22,6 +22,9 @@ import java.net.Socket;
 
 import org.apache.geode.StatisticsFactory;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolService;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolServiceLoader;
 import org.apache.geode.internal.cache.tier.Acceptor;
 import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.security.SecurityService;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/TcpServerFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/TcpServerFactory.java
index 47b26d8..1f16dfd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/TcpServerFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/TcpServerFactory.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.PoolStatHelper;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolServiceLoader;
 import org.apache.geode.internal.logging.LogService;
 
 public class TcpServerFactory {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ClientProtocolMessageHandler.java
similarity index 80%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ClientProtocolMessageHandler.java
index 1d86d70..559f7e1 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ClientProtocolMessageHandler.java
@@ -13,14 +13,14 @@
  * the License.
  */
 
-package org.apache.geode.internal.cache.tier.sockets;
+package org.apache.geode.internal.protocol;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.internal.cache.tier.sockets.GenericProtocolServerConnection;
+import org.apache.geode.internal.cache.tier.sockets.ServerConnectionFactory;
 
 
 /**
@@ -30,6 +30,9 @@ import org.apache.geode.StatisticsFactory;
  * Currently, only one {@link ClientProtocolMessageHandler} at a time can be used in a Geode
  * instance. It gets wired into {@link ServerConnectionFactory} to create all instances of
  * {@link GenericProtocolServerConnection}.
+ *
+ * Implementors of this interface are expected to be able to be used for any number of connections
+ * at a time (stateless except for the statistics).
  */
 public interface ClientProtocolMessageHandler {
   void receiveMessage(InputStream inputStream, OutputStream outputStream,
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java
similarity index 96%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java
index 1868ced..5801292 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java
@@ -12,11 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 import java.util.HashMap;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.pdx.JSONFormatter;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.internal.serialization.SerializationType;
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java
similarity index 93%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java
index 6ac73de..f390247 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java
@@ -12,11 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 import java.util.function.Function;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 
 @Experimental
 public class Failure<SuccessType> implements Result<SuccessType> {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/MessageExecutionContext.java
similarity index 55%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/MessageExecutionContext.java
index b205b33..f95704b 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/MessageExecutionContext.java
@@ -13,48 +13,61 @@
  * the License.
  */
 
-package org.apache.geode.internal.cache.tier.sockets;
+package org.apache.geode.internal.protocol;
+
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
-import org.apache.geode.internal.protocol.protobuf.security.Authorizer;
-import org.apache.geode.internal.protocol.protobuf.security.NoOpAuthorizer;
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.protocol.security.processors.AuthorizationSecurityProcessor;
+import org.apache.geode.internal.protocol.security.processors.NoAuthenticationSecurityProcessor;
+import org.apache.geode.internal.protocol.security.Authenticator;
+import org.apache.geode.internal.protocol.security.NoOpAuthenticator;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
+import org.apache.geode.internal.protocol.security.Authorizer;
+import org.apache.geode.internal.protocol.security.NoOpAuthorizer;
 
 @Experimental
 public class MessageExecutionContext {
-  private Cache cache;
-  private Locator locator;
+  private final Cache cache;
+  private final Locator locator;
   private final Authorizer authorizer;
-  private final Object authenticatedSubject;
-  private final ProtobufClientStatistics statistics;
+  private Object authenticatedToken;
+  private final ProtocolClientStatistics statistics;
+  private SecurityProcessor securityProcessor;
+  private final Authenticator authenticator;
 
 
-  public MessageExecutionContext(Cache cache, Authorizer streamAuthorizer,
-      Object authenticatedSubject, ProtobufClientStatistics statistics) {
+  public MessageExecutionContext(Cache cache, Authenticator authenticator,
+      Authorizer streamAuthorizer, Object authenticatedToken, ProtocolClientStatistics statistics,
+      SecurityProcessor securityProcessor) {
     this.cache = cache;
+    this.locator = null;
     this.authorizer = streamAuthorizer;
-    this.authenticatedSubject = authenticatedSubject;
+    this.authenticatedToken = authenticatedToken;
     this.statistics = statistics;
+    this.securityProcessor = securityProcessor;
+    this.authenticator = authenticator;
   }
 
-  public MessageExecutionContext(InternalLocator locator, ProtobufClientStatistics statistics) {
+  public MessageExecutionContext(InternalLocator locator, ProtocolClientStatistics statistics) {
     this.locator = locator;
+    this.cache = null;
     // set a no-op authorizer until such time as locators implement authentication
     // and authorization checks
     this.authorizer = new NoOpAuthorizer();
+    this.authenticator = new NoOpAuthenticator();
     this.statistics = statistics;
-    this.authenticatedSubject = new Object();
+    this.securityProcessor = new NoAuthenticationSecurityProcessor();
   }
 
   /**
    * Returns the cache associated with this execution
    * <p>
-   *
+   * 
    * @throws InvalidExecutionContextException if there is no cache available
    */
   public Cache getCache() throws InvalidExecutionContextException {
@@ -68,7 +81,7 @@ public class MessageExecutionContext {
   /**
    * Returns the locator associated with this execution
    * <p>
-   *
+   * 
    * @throws InvalidExecutionContextException if there is no locator available
    */
   public Locator getLocator() throws InvalidExecutionContextException {
@@ -87,10 +100,10 @@ public class MessageExecutionContext {
   }
 
   /**
-   * Returns the authentication/authorization subject associated with this execution
+   * Returns the authentication token associated with this execution
    */
-  public Object getSubject() {
-    return authenticatedSubject;
+  public Object getAuthenticationToken() {
+    return authenticatedToken;
   }
 
 
@@ -98,7 +111,23 @@ public class MessageExecutionContext {
    * Returns the statistics for recording operation stats. In a unit test environment this may not
    * be a protocol-specific statistics implementation.
    */
-  public ProtobufClientStatistics getStatistics() {
+  public ProtocolClientStatistics getStatistics() {
     return statistics;
   }
+
+  public Authenticator getAuthenticator() {
+    return authenticator;
+  }
+
+  public SecurityProcessor getSecurityProcessor() {
+    return securityProcessor;
+  }
+
+  public void setSecurityProcessor(AuthorizationSecurityProcessor securityProcessor) {
+    this.securityProcessor = securityProcessor;
+  }
+
+  public void setAuthenticationToken(Object authenticationToken) {
+    this.authenticatedToken = authenticationToken;
+  }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java
similarity index 92%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java
index 12c50aa..6e2d636 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java
@@ -13,12 +13,13 @@
  * the License.
  */
 
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 import java.util.function.Function;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 import org.apache.geode.security.ResourcePermission;
 
 @Experimental
@@ -36,11 +37,11 @@ public class OperationContext<OperationRequest, OperationResponse> {
     this.operationHandler = operationHandler;
     this.fromRequest = fromRequest;
     this.toResponse = toResponse;
-    this.toErrorResponse = OperationContext::makeErrorBuilder;
+    this.toErrorResponse = this::makeErrorBuilder;
     accessPermissionRequired = permissionRequired;
   }
 
-  public static ClientProtocol.Response.Builder makeErrorBuilder(
+  private ClientProtocol.Response.Builder makeErrorBuilder(
       ClientProtocol.ErrorResponse errorResponse) {
     return ClientProtocol.Response.newBuilder().setErrorResponse(errorResponse);
   }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java
deleted file mode 100644
index 90c9895..0000000
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.apache.geode.internal.protocol;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.geode.annotations.Experimental;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.IncompatibleVersionException;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtobufStreamProcessor;
-import org.apache.geode.internal.protocol.protobuf.security.Authenticator;
-import org.apache.geode.internal.protocol.protobuf.security.Authorizer;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
-import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.security.AuthenticationFailedException;
-
-
-@Experimental
-public final class ProtobufCachePipeline implements ClientProtocolProcessor {
-  private final ProtobufClientStatistics statistics;
-  private final Cache cache;
-  private final Authorizer authorizer;
-  private final SecurityService securityService;
-  private final ProtobufStreamProcessor streamProcessor;
-  private final Authenticator authenticator;
-
-  private Object authenticatorToken;
-
-  ProtobufCachePipeline(ProtobufStreamProcessor protobufStreamProcessor,
-      ProtobufClientStatistics statistics, Cache cache, Authenticator authenticator,
-      Authorizer authorizer, SecurityService securityService) {
-    this.streamProcessor = protobufStreamProcessor;
-    this.statistics = statistics;
-    this.cache = cache;
-    this.authenticator = authenticator;
-    this.authorizer = authorizer;
-    this.securityService = securityService;
-    this.statistics.clientConnected();
-  }
-
-  @Override
-  public void processMessage(InputStream inputStream, OutputStream outputStream)
-      throws IOException, IncompatibleVersionException {
-    if (authenticatorToken == null) {
-      try {
-        authenticatorToken = authenticator.authenticate(inputStream, outputStream, securityService);
-      } catch (AuthenticationFailedException ex) {
-        statistics.incAuthenticationFailures();
-        throw new IOException(ex);
-      }
-    } else {
-      streamProcessor.receiveMessage(inputStream, outputStream,
-          new MessageExecutionContext(cache, authorizer, authenticatorToken, statistics));
-    }
-  }
-
-  @Override
-  public void close() {
-    this.statistics.clientDisconnected();
-  }
-}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufProtocolService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufProtocolService.java
deleted file mode 100644
index 7c14852..0000000
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufProtocolService.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package org.apache.geode.internal.protocol;
-
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolService;
-import org.apache.geode.internal.protocol.protobuf.security.Authorizer;
-import org.apache.geode.internal.protocol.protobuf.security.InvalidConfigAuthenticator;
-import org.apache.geode.internal.protocol.protobuf.security.NoOpAuthorizer;
-import org.apache.geode.internal.protocol.protobuf.security.ProtobufShiroAuthenticator;
-import org.apache.geode.internal.protocol.protobuf.ProtobufStreamProcessor;
-import org.apache.geode.internal.protocol.protobuf.security.ProtobufShiroAuthorizer;
-import org.apache.geode.internal.protocol.protobuf.statistics.NoOpStatistics;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatisticsImpl;
-import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.protocol.protobuf.security.Authenticator;
-import org.apache.geode.internal.protocol.protobuf.security.NoOpAuthenticator;
-
-public class ProtobufProtocolService implements ClientProtocolService {
-  private volatile ProtobufClientStatistics statistics;
-  private final ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor();
-
-  @Override
-  public synchronized void initializeStatistics(String statisticsName, StatisticsFactory factory) {
-    if (statistics == null) {
-      statistics = new ProtobufClientStatisticsImpl(factory, statisticsName,
-          ProtobufClientStatistics.PROTOBUF_STATS_NAME);
-    }
-  }
-
-  @Override
-  public ClientProtocolProcessor createProcessorForCache(Cache cache,
-      SecurityService securityService) {
-    assert (statistics != null);
-
-    Authenticator authenticator = getAuthenticator(securityService);
-    Authorizer authorizer = getAuthorizer(securityService);
-
-    return new ProtobufCachePipeline(protobufStreamProcessor, getStatistics(), cache, authenticator,
-        authorizer, securityService);
-  }
-
-  /**
-   * For internal use. This is necessary because the statistics may get initialized in another
-   * thread.
-   */
-  ProtobufClientStatistics getStatistics() {
-    if (statistics == null) {
-      return new NoOpStatistics();
-    }
-    return statistics;
-  }
-
-  @Override
-  public ClientProtocolProcessor createProcessorForLocator(InternalLocator locator) {
-    return new ProtobufLocatorPipeline(protobufStreamProcessor, getStatistics(), locator);
-  }
-
-  private Authenticator getAuthenticator(SecurityService securityService) {
-    if (securityService.isIntegratedSecurity()) {
-      // Simple authenticator...normal shiro
-      return new ProtobufShiroAuthenticator();
-    }
-    if (securityService.isPeerSecurityRequired() || securityService.isClientSecurityRequired()) {
-      // Failing authentication...legacy security
-      return new InvalidConfigAuthenticator();
-    } else {
-      // Noop authenticator...no security
-      return new NoOpAuthenticator();
-    }
-  }
-
-  private Authorizer getAuthorizer(SecurityService securityService) {
-    if (securityService.isIntegratedSecurity()) {
-      // Simple authenticator...normal shiro
-      return new ProtobufShiroAuthorizer(securityService);
-    }
-    if (securityService.isPeerSecurityRequired() || securityService.isClientSecurityRequired()) {
-      // Failing authentication...legacy security
-      // This should never be called.
-      return null;
-    } else {
-      // Noop authenticator...no security
-      return new NoOpAuthorizer();
-    }
-  }
-}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java
similarity index 92%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java
index 0e41d7a..302889c 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java
@@ -12,16 +12,17 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 public enum ProtocolErrorCode {
   GENERIC_FAILURE(1000),
   VALUE_ENCODING_ERROR(1100),
   UNSUPPORTED_VERSION(1101),
   UNSUPPORTED_OPERATION(1102),
+  UNSUPPORTED_AUTHENTICATION_MODE(1103),
   AUTHENTICATION_FAILED(1200),
   AUTHORIZATION_FAILED(1201),
-  UNAUTHORIZED_REQUEST(1202),
+  ALREADY_AUTHENTICATED(1202),
   LOW_MEMORY(1300),
   DATA_UNREACHABLE(1301),
   OPERATION_TIMEOUT(1302),
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java
similarity index 91%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java
index bada098..6a1a3a4 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java
@@ -12,11 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 import java.util.function.Function;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 
 @Experimental
 public interface Result<SuccessType> {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java
similarity index 93%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java
index 224b21c..1c1e6f9 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java
@@ -12,11 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
 import java.util.function.Function;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 
 @Experimental
 public class Success<SuccessType> implements Result<SuccessType> {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java
index 9d2d482..286c525 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java
@@ -15,10 +15,10 @@
 package org.apache.geode.internal.protocol.operations;
 
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.protobuf.ProtobufOpsProcessor;
-import org.apache.geode.internal.protocol.protobuf.Result;
+import org.apache.geode.internal.protocol.Result;
 import org.apache.geode.internal.serialization.SerializationService;
 
 /**
@@ -34,6 +34,6 @@ public interface OperationHandler<Req, Resp> {
    * indicated on the provided cache, and return a response.
    */
   Result<Resp> process(SerializationService serializationService, Req request,
-      MessageExecutionContext executionContext) throws InvalidExecutionContextException;
+      MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException;
 }
 
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufCachePipeline.java
similarity index 52%
copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java
copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufCachePipeline.java
index f4ed9e2..44829e0 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufCachePipeline.java
@@ -13,39 +13,43 @@
  * the License.
  */
 
-package org.apache.geode.internal.protocol;
+package org.apache.geode.internal.protocol.protobuf;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.cache.IncompatibleVersionException;
-import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtobufStreamProcessor;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.cache.Cache;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.security.Authenticator;
+import org.apache.geode.internal.protocol.security.Authorizer;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
+
 
 @Experimental
-public final class ProtobufLocatorPipeline implements ClientProtocolProcessor {
-  private final ProtobufClientStatistics statistics;
-  private final InternalLocator locator;
+public final class ProtobufCachePipeline implements ClientProtocolProcessor {
+  private final ProtocolClientStatistics statistics;
   private final ProtobufStreamProcessor streamProcessor;
 
-  ProtobufLocatorPipeline(ProtobufStreamProcessor protobufStreamProcessor,
-      ProtobufClientStatistics statistics, InternalLocator locator) {
+  private final MessageExecutionContext messageExecutionContext;
+
+  ProtobufCachePipeline(ProtobufStreamProcessor protobufStreamProcessor,
+      ProtocolClientStatistics statistics, Cache cache, Authenticator authenticator,
+      Authorizer authorizer, SecurityProcessor securityProcessor) {
     this.streamProcessor = protobufStreamProcessor;
     this.statistics = statistics;
-    this.locator = locator;
     this.statistics.clientConnected();
+    this.messageExecutionContext = new MessageExecutionContext(cache, authenticator, authorizer,
+        null, statistics, securityProcessor);
   }
 
   @Override
   public void processMessage(InputStream inputStream, OutputStream outputStream)
-      throws IOException, IncompatibleVersionException {
-    streamProcessor.receiveMessage(inputStream, outputStream,
-        new MessageExecutionContext(locator, statistics));
+      throws IOException {
+    streamProcessor.receiveMessage(inputStream, outputStream, messageExecutionContext);
   }
 
   @Override
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufLocatorPipeline.java
similarity index 79%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufLocatorPipeline.java
index f4ed9e2..12aab64 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufLocatorPipeline.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufLocatorPipeline.java
@@ -13,7 +13,7 @@
  * the License.
  */
 
-package org.apache.geode.internal.protocol;
+package org.apache.geode.internal.protocol.protobuf;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,19 +22,18 @@ import java.io.OutputStream;
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.IncompatibleVersionException;
 import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtobufStreamProcessor;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
 
 @Experimental
 public final class ProtobufLocatorPipeline implements ClientProtocolProcessor {
-  private final ProtobufClientStatistics statistics;
+  private final ProtocolClientStatistics statistics;
   private final InternalLocator locator;
   private final ProtobufStreamProcessor streamProcessor;
 
   ProtobufLocatorPipeline(ProtobufStreamProcessor protobufStreamProcessor,
-      ProtobufClientStatistics statistics, InternalLocator locator) {
+      ProtocolClientStatistics statistics, InternalLocator locator) {
     this.streamProcessor = protobufStreamProcessor;
     this.statistics = statistics;
     this.locator = locator;
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java
index a8cde46..5968e8e 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java
@@ -17,15 +17,20 @@ package org.apache.geode.internal.protocol.protobuf;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.internal.protocol.protobuf.registry.OperationContextRegistry;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.OperationContext;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.protobuf.registry.ProtobufOperationContextRegistry;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
 import org.apache.geode.internal.serialization.SerializationService;
+import org.apache.geode.security.AuthenticationRequiredException;
+import org.apache.geode.security.NotAuthorizedException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 /**
  * This handles protobuf requests by determining the operation type of the request and dispatching
@@ -34,47 +39,52 @@ import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
 @Experimental
 public class ProtobufOpsProcessor {
 
-  private final OperationContextRegistry operationContextRegistry;
+  private final ProtobufOperationContextRegistry protobufOperationContextRegistry;
   private final SerializationService serializationService;
   private static final Logger logger = LogService.getLogger(ProtobufOpsProcessor.class);
 
   public ProtobufOpsProcessor(SerializationService serializationService,
-      OperationContextRegistry operationContextRegistry) {
+      ProtobufOperationContextRegistry protobufOperationContextRegistry) {
     this.serializationService = serializationService;
-    this.operationContextRegistry = operationContextRegistry;
+    this.protobufOperationContextRegistry = protobufOperationContextRegistry;
   }
 
   public ClientProtocol.Response process(ClientProtocol.Request request,
-      MessageExecutionContext context) {
+      MessageExecutionContext messageExecutionContext) {
     ClientProtocol.Request.RequestAPICase requestType = request.getRequestAPICase();
     logger.debug("Processing request of type {}", requestType);
-    OperationContext operationContext = operationContextRegistry.getOperationContext(requestType);
-    ClientProtocol.Response.Builder builder;
+    OperationContext operationContext =
+        protobufOperationContextRegistry.getOperationContext(requestType);
     Result result;
+
+    SecurityProcessor securityProcessor = messageExecutionContext.getSecurityProcessor();
     try {
-      if (context.getAuthorizer().authorize(context.getSubject(),
-          operationContext.getAccessPermissionRequired())) {
-        result = operationContext.getOperationHandler().process(serializationService,
-            operationContext.getFromRequest().apply(request), context);
-      } else {
-        logger.warn("Received unauthorized request");
-        recordAuthorizationViolation(context);
-        result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(AUTHORIZATION_FAILED,
-            "User isn't authorized for this operation."));
-      }
-    } catch (InvalidExecutionContextException exception) {
-      logger.error("Invalid execution context found for operation {}", requestType);
-      result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(UNSUPPORTED_OPERATION,
-          "Invalid execution context found for operation."));
+      securityProcessor.validateOperation(request, messageExecutionContext, operationContext);
+      result = processOperation(request, messageExecutionContext, requestType, operationContext);
+    } catch (AuthenticationRequiredException e) {
+      logger.warn(e);
+      result = Failure
+          .of(ProtobufResponseUtilities.makeErrorResponse(AUTHENTICATION_FAILED, e.getMessage()));
+    } catch (NotAuthorizedException e) {
+      logger.warn(e);
+      messageExecutionContext.getStatistics().incAuthorizationViolations();
+      result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(AUTHORIZATION_FAILED,
+          "The user is not authorized to complete this operation"));
     }
 
-    builder = (ClientProtocol.Response.Builder) result.map(operationContext.getToResponse(),
-        operationContext.getToErrorResponse());
-    return builder.build();
+    return ((ClientProtocol.Response.Builder) result.map(operationContext.getToResponse(),
+        operationContext.getToErrorResponse())).build();
   }
 
-  private void recordAuthorizationViolation(MessageExecutionContext context) {
-    ProtobufClientStatistics statistics = context.getStatistics();
-    statistics.incAuthorizationViolations();
+  private Result processOperation(ClientProtocol.Request request, MessageExecutionContext context,
+      ClientProtocol.Request.RequestAPICase requestType, OperationContext operationContext) {
+    try {
+      return operationContext.getOperationHandler().process(serializationService,
+          operationContext.getFromRequest().apply(request), context);
+    } catch (InvalidExecutionContextException exception) {
+      logger.error("Invalid execution context found for operation {}", requestType);
+      return Failure.of(ProtobufResponseUtilities.makeErrorResponse(UNSUPPORTED_OPERATION,
+          "Invalid execution context found for operation."));
+    }
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolService.java
new file mode 100644
index 0000000..4d8a100
--- /dev/null
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolService.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.protocol.protobuf;
+
+import org.apache.geode.StatisticsFactory;
+import org.apache.geode.cache.Cache;
+import org.apache.geode.distributed.internal.InternalLocator;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolService;
+import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatisticsImpl;
+import org.apache.geode.internal.protocol.security.Authenticator;
+import org.apache.geode.internal.protocol.security.Authorizer;
+import org.apache.geode.internal.protocol.security.SecurityLookupService;
+import org.apache.geode.internal.protocol.statistics.NoOpStatistics;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
+import org.apache.geode.internal.security.SecurityService;
+
+public class ProtobufProtocolService implements ClientProtocolService {
+  private volatile ProtocolClientStatistics statistics;
+  private final ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor();
+  private final SecurityLookupService securityLookupService = new SecurityLookupService();
+
+  @Override
+  public synchronized void initializeStatistics(String statisticsName, StatisticsFactory factory) {
+    if (statistics == null) {
+      statistics = new ProtobufClientStatisticsImpl(factory, statisticsName);
+    }
+  }
+
+  @Override
+  public ClientProtocolProcessor createProcessorForCache(Cache cache,
+      SecurityService securityService) {
+    assert (statistics != null);
+
+    Authenticator authenticator = securityLookupService.lookupAuthenticator(securityService);
+    Authorizer authorizer = securityLookupService.lookupAuthorizer(securityService);
+
+    return new ProtobufCachePipeline(protobufStreamProcessor, getStatistics(), cache, authenticator,
+        authorizer, securityLookupService.lookupProcessor(securityService));
+  }
+
+  /**
+   * For internal use. This is necessary because the statistics may get initialized in another
+   * thread.
+   */
+  ProtocolClientStatistics getStatistics() {
+    if (statistics == null) {
+      return new NoOpStatistics();
+    }
+    return statistics;
+  }
+
+  @Override
+  public ClientProtocolProcessor createProcessorForLocator(InternalLocator locator) {
+    return new ProtobufLocatorPipeline(protobufStreamProcessor, getStatistics(), locator);
+  }
+}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java
index 8b8dbb3..f7281fd 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java
@@ -15,6 +15,7 @@
 package org.apache.geode.internal.protocol.protobuf;
 
 import org.apache.geode.annotations.Experimental;
+import org.apache.geode.internal.protocol.EncodingTypeTranslator;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.SerializationType;
 import org.apache.geode.internal.serialization.TypeCodec;
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java
index 89f02e3..7bc4730 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java
@@ -22,13 +22,13 @@ import java.io.OutputStream;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.ClientProtocolMessageHandler;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException;
-import org.apache.geode.internal.protocol.protobuf.registry.OperationContextRegistry;
+import org.apache.geode.internal.protocol.protobuf.registry.ProtobufOperationContextRegistry;
 import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 
 /**
@@ -45,7 +45,7 @@ public class ProtobufStreamProcessor implements ClientProtocolMessageHandler {
   public ProtobufStreamProcessor() {
     protobufProtocolSerializer = new ProtobufProtocolSerializer();
     protobufOpsProcessor = new ProtobufOpsProcessor(new ProtobufSerializationService(),
-        new OperationContextRegistry());
+        new ProtobufOperationContextRegistry());
   }
 
   @Override
@@ -67,7 +67,7 @@ public class ProtobufStreamProcessor implements ClientProtocolMessageHandler {
       logger.debug(errorMessage);
       throw new EOFException(errorMessage);
     }
-    ProtobufClientStatistics statistics = executionContext.getStatistics();
+    ProtocolClientStatistics statistics = executionContext.getStatistics();
     statistics.messageReceived(message.getSerializedSize());
 
     ClientProtocol.Request request = message.getRequest();
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java
index 2001645..c91c9e1 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java
@@ -25,23 +25,23 @@ import org.apache.geode.cache.CacheLoaderException;
 import org.apache.geode.cache.PartitionedRegionStorageException;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.TimeoutException;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class GetAllRequestOperationHandler
@@ -50,10 +50,10 @@ public class GetAllRequestOperationHandler
 
   @Override
   public Result<RegionAPI.GetAllResponse> process(SerializationService serializationService,
-      RegionAPI.GetAllRequest request, MessageExecutionContext executionContext)
+      RegionAPI.GetAllRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
     String regionName = request.getRegionName();
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
     if (region == null) {
       logger.error("Received GetAll request for non-existing region {}", regionName);
       return Failure
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java
index c8f663f..f15e94c 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java
@@ -21,13 +21,13 @@ import java.util.stream.Collectors;
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Result;
+import org.apache.geode.internal.protocol.Result;
 import org.apache.geode.internal.protocol.protobuf.ServerAPI;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.serialization.SerializationService;
 
 @Experimental
@@ -37,9 +37,9 @@ public class GetAvailableServersOperationHandler implements
   @Override
   public Result<ServerAPI.GetAvailableServersResponse> process(
       SerializationService serializationService, ServerAPI.GetAvailableServersRequest request,
-      MessageExecutionContext executionContext) throws InvalidExecutionContextException {
+      MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException {
 
-    InternalLocator internalLocator = (InternalLocator) executionContext.getLocator();
+    InternalLocator internalLocator = (InternalLocator) messageExecutionContext.getLocator();
     ArrayList serversFromSnapshot =
         internalLocator.getServerLocatorAdvisee().getLoadSnapshot().getServers(null);
     if (serversFromSnapshot == null) {
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java
index 7ffdcd8..7e7cf71 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java
@@ -18,12 +18,12 @@ import java.util.Set;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 
@@ -33,9 +33,9 @@ public class GetRegionNamesRequestOperationHandler
 
   @Override
   public Result<RegionAPI.GetRegionNamesResponse> process(SerializationService serializationService,
-      RegionAPI.GetRegionNamesRequest request, MessageExecutionContext executionContext)
+      RegionAPI.GetRegionNamesRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
-    Set<Region<?, ?>> regions = executionContext.getCache().rootRegions();
+    Set<Region<?, ?>> regions = messageExecutionContext.getCache().rootRegions();
     return Success.of(ProtobufResponseUtilities.createGetRegionNamesResponse(regions));
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java
index 78d3d5c..f602d6a 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java
@@ -18,20 +18,20 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
-import org.apache.geode.internal.protocol.protobuf.Failure;
+import org.apache.geode.internal.protocol.Failure;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class GetRegionRequestOperationHandler
@@ -40,11 +40,11 @@ public class GetRegionRequestOperationHandler
 
   @Override
   public Result<RegionAPI.GetRegionResponse> process(SerializationService serializationService,
-      RegionAPI.GetRegionRequest request, MessageExecutionContext executionContext)
+      RegionAPI.GetRegionRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
     String regionName = request.getRegionName();
 
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
     if (region == null) {
       logger.error("Received GetRegion request for non-existing region {}", regionName);
       return Failure.of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND,
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java
index e7702b8..a67bdc9 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java
@@ -18,23 +18,22 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class GetRequestOperationHandler
@@ -43,10 +42,10 @@ public class GetRequestOperationHandler
 
   @Override
   public Result<RegionAPI.GetResponse> process(SerializationService serializationService,
-      RegionAPI.GetRequest request, MessageExecutionContext executionContext)
+      RegionAPI.GetRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
     String regionName = request.getRegionName();
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
     if (region == null) {
       logger.error("Received Get request for non-existing region {}", regionName);
       return Failure
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java
index 300616b..b085370 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java
@@ -22,22 +22,22 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class PutAllRequestOperationHandler
@@ -46,10 +46,10 @@ public class PutAllRequestOperationHandler
 
   @Override
   public Result<RegionAPI.PutAllResponse> process(SerializationService serializationService,
-      RegionAPI.PutAllRequest putAllRequest, MessageExecutionContext executionContext)
+      RegionAPI.PutAllRequest putAllRequest, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
     String regionName = putAllRequest.getRegionName();
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
 
     if (region == null) {
       logger.error("Received PutAll request for non-existing region {}", regionName);
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java
index 81c842d..345f829 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java
@@ -18,22 +18,22 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Failure;
+import org.apache.geode.internal.protocol.Failure;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class PutRequestOperationHandler
@@ -42,10 +42,10 @@ public class PutRequestOperationHandler
 
   @Override
   public Result<RegionAPI.PutResponse> process(SerializationService serializationService,
-      RegionAPI.PutRequest request, MessageExecutionContext executionContext)
+      RegionAPI.PutRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
     String regionName = request.getRegionName();
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
     if (region == null) {
       logger.warn("Received Put request for non-existing region: {}", regionName);
       return Failure.of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND,
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java
index 0e3b148..2278f78 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java
@@ -19,20 +19,20 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.operations.OperationHandler;
-import org.apache.geode.internal.protocol.protobuf.Failure;
+import org.apache.geode.internal.protocol.Failure;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.*;
 
 @Experimental
 public class RemoveRequestOperationHandler
@@ -41,11 +41,11 @@ public class RemoveRequestOperationHandler
 
   @Override
   public Result<RegionAPI.RemoveResponse> process(SerializationService serializationService,
-      RegionAPI.RemoveRequest request, MessageExecutionContext executionContext)
+      RegionAPI.RemoveRequest request, MessageExecutionContext messageExecutionContext)
       throws InvalidExecutionContextException {
 
     String regionName = request.getRegionName();
-    Region region = executionContext.getCache().getRegion(regionName);
+    Region region = messageExecutionContext.getCache().getRegion(regionName);
     if (region == null) {
       logger.error("Received Remove request for non-existing region {}", regionName);
       return Failure
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java
new file mode 100644
index 0000000..ffc3c04
--- /dev/null
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.protocol.protobuf.operations.security;
+
+import java.util.Properties;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.exception.InvalidExecutionContextException;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
+import org.apache.geode.internal.protocol.operations.OperationHandler;
+import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI;
+import org.apache.geode.internal.protocol.protobuf.BasicTypes;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
+import org.apache.geode.internal.protocol.protobuf.security.exception.IncompatibleAuthenticationMechanismsException;
+import org.apache.geode.internal.protocol.security.processors.AuthorizationSecurityProcessor;
+import org.apache.geode.internal.protocol.security.Authenticator;
+import org.apache.geode.internal.serialization.SerializationService;
+import org.apache.geode.security.AuthenticationFailedException;
+
+public class AuthenticationRequestOperationHandler implements
+    OperationHandler<AuthenticationAPI.AuthenticationRequest, AuthenticationAPI.AuthenticationResponse> {
+  private static final Logger logger = LogManager.getLogger();
+
+  @Override
+  public Result<AuthenticationAPI.AuthenticationResponse> process(
+      SerializationService serializationService, AuthenticationAPI.AuthenticationRequest request,
+      MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException {
+
+    if (messageExecutionContext.getAuthenticationToken() != null) {
+      return Failure.of(ClientProtocol.ErrorResponse.newBuilder()
+          .setError(buildAndLogError(ProtocolErrorCode.ALREADY_AUTHENTICATED,
+              "The user has already been authenticated for this connection. Re-authentication is not supported at this time.",
+              null))
+          .build());
+    }
+
+    Authenticator authenticator = messageExecutionContext.getAuthenticator();
+    Properties properties = new Properties();
+    properties.putAll(request.getCredentialsMap());
+
+    try {
+      Object authenticationToken = authenticator.authenticate(properties);
+      messageExecutionContext.setSecurityProcessor(new AuthorizationSecurityProcessor());
+      messageExecutionContext.setAuthenticationToken(authenticationToken);
+      return Success
+          .of(AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(true).build());
+    } catch (IncompatibleAuthenticationMechanismsException e) {
+      return Failure.of(ClientProtocol.ErrorResponse.newBuilder().setError(
+          buildAndLogError(ProtocolErrorCode.UNSUPPORTED_AUTHENTICATION_MODE, e.getMessage(), e))
+          .build());
+    } catch (AuthenticationFailedException e) {
+      return Success.of(
+          AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(false).build());
+    }
+  }
+
+  private BasicTypes.Error buildAndLogError(ProtocolErrorCode errorCode, String message,
+      Exception ex) {
+    if (ex == null) {
+      logger.warn(message);
+    } else {
+      logger.warn(message, ex);
+    }
+
+    return BasicTypes.Error.newBuilder().setErrorCode(errorCode.codeValue).setMessage(message)
+        .build();
+  }
+}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/OperationContextRegistry.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/ProtobufOperationContextRegistry.java
similarity index 88%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/OperationContextRegistry.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/ProtobufOperationContextRegistry.java
index 736fba5..757dd44 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/OperationContextRegistry.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/registry/ProtobufOperationContextRegistry.java
@@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol.Request.RequestAPICase;
-import org.apache.geode.internal.protocol.protobuf.OperationContext;
+import org.apache.geode.internal.protocol.OperationContext;
 import org.apache.geode.internal.protocol.protobuf.operations.GetAllRequestOperationHandler;
 import org.apache.geode.internal.protocol.protobuf.operations.GetAvailableServersOperationHandler;
 import org.apache.geode.internal.protocol.protobuf.operations.GetRegionNamesRequestOperationHandler;
@@ -30,13 +30,14 @@ import org.apache.geode.internal.protocol.protobuf.operations.GetRequestOperatio
 import org.apache.geode.internal.protocol.protobuf.operations.PutAllRequestOperationHandler;
 import org.apache.geode.internal.protocol.protobuf.operations.PutRequestOperationHandler;
 import org.apache.geode.internal.protocol.protobuf.operations.RemoveRequestOperationHandler;
+import org.apache.geode.internal.protocol.protobuf.operations.security.AuthenticationRequestOperationHandler;
 import org.apache.geode.security.ResourcePermission;
 
 @Experimental
-public class OperationContextRegistry {
+public class ProtobufOperationContextRegistry {
   private Map<RequestAPICase, OperationContext> operationContexts = new ConcurrentHashMap<>();
 
-  public OperationContextRegistry() {
+  public ProtobufOperationContextRegistry() {
     addContexts();
   }
 
@@ -45,6 +46,13 @@ public class OperationContextRegistry {
   }
 
   private void addContexts() {
+    operationContexts.put(RequestAPICase.AUTHENTICATIONREQUEST,
+        new OperationContext<>(ClientProtocol.Request::getAuthenticationRequest,
+            new AuthenticationRequestOperationHandler(),
+            opsResp -> ClientProtocol.Response.newBuilder().setAuthenticationResponse(opsResp),
+            new ResourcePermission(ResourcePermission.Resource.DATA,
+                ResourcePermission.Operation.READ)));
+
     operationContexts.put(RequestAPICase.GETREQUEST,
         new OperationContext<>(ClientProtocol.Request::getGetRequest,
             new GetRequestOperationHandler(),
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java
index bf3d669..bed24bb 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java
@@ -21,31 +21,23 @@ import java.io.OutputStream;
 
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI;
+import org.apache.geode.internal.protocol.protobuf.security.exception.IncompatibleAuthenticationMechanismsException;
+import org.apache.geode.internal.protocol.security.Authenticator;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.security.AuthenticationRequiredException;
+import org.apache.geode.security.AuthenticationFailedException;
 
-public class InvalidConfigAuthenticator implements Authenticator {
+public class InvalidConfigAuthenticator implements Authenticator<Object, Object> {
   private static final Logger logger = LogService.getLogger(InvalidConfigAuthenticator.class);
 
   @Override
-  public Object authenticate(InputStream inputStream, OutputStream outputStream,
-      SecurityService securityService) throws IOException {
+  public Object authenticate(Object object) throws AuthenticationFailedException {
     logger.warn(
         "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication.");
-
-    ClientProtocol.Message.newBuilder()
-        .setResponse(ClientProtocol.Response.newBuilder()
-            .setErrorResponse(ClientProtocol.ErrorResponse.newBuilder()
-                .setError(BasicTypes.Error.newBuilder()
-                    .setErrorCode(ProtocolErrorCode.AUTHENTICATION_FAILED.codeValue).setMessage(
-                        "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication."))))
-        .build().writeDelimitedTo(outputStream);
-
-    throw new IOException("Protobuf clients not supported with legacy security.");
+    throw new IncompatibleAuthenticationMechanismsException(
+        "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication.");
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java
index ca47b94..fc95751 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java
@@ -14,74 +14,23 @@
  */
 package org.apache.geode.internal.protocol.protobuf.security;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.AUTHENTICATION_FAILED;
-
-import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI;
-
-import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.security.AuthenticationFailedException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.Properties;
 
 import org.apache.shiro.subject.Subject;
 
-public class ProtobufShiroAuthenticator implements Authenticator {
-
-  private static final String SHOULD_HAVE_AUTHED =
-      "Got non-auth request while expecting authentication request";
-
-  @Override
-  public Subject authenticate(InputStream inputStream, OutputStream outputStream,
-      SecurityService securityService) throws IOException, AuthenticationFailedException {
-    ClientProtocol.Message message = ClientProtocol.Message.parseDelimitedFrom(inputStream);
-
-    if (message.getRequest().getRequestAPICase()
-        .getNumber() != ClientProtocol.Request.SIMPLEAUTHENTICATIONREQUEST_FIELD_NUMBER) {
-      failAuth(outputStream);
-    }
-
-    AuthenticationAPI.AuthenticationRequest authenticationRequest =
-        message.getRequest().getSimpleAuthenticationRequest();
-    if (authenticationRequest == null) {
-      failAuth(outputStream);
-    }
-
-    Properties properties = new Properties();
-    properties.putAll(authenticationRequest.getCredentialsMap());
-
-    try {
-      // throws AuthenticationFailedException on failure.
-      Subject authToken = securityService.login(properties);
+import org.apache.geode.internal.protocol.security.Authenticator;
+import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.security.AuthenticationFailedException;
 
-      sendAuthenticationResponse(outputStream, true);
-      return authToken;
-    } catch (AuthenticationFailedException ex) {
-      sendAuthenticationResponse(outputStream, false);
-      throw ex;
-    }
-  }
+public class ProtobufShiroAuthenticator implements Authenticator<Properties, Subject> {
+  private final SecurityService securityService;
 
-  private void sendAuthenticationResponse(OutputStream outputStream, boolean success)
-      throws IOException {
-    ClientProtocol.Message.newBuilder()
-        .setResponse(ClientProtocol.Response.newBuilder().setSimpleAuthenticationResponse(
-            AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(success)))
-        .build().writeDelimitedTo(outputStream);
+  public ProtobufShiroAuthenticator(SecurityService securityService) {
+    this.securityService = securityService;
   }
 
-  private void failAuth(OutputStream outputStream) throws IOException {
-    ClientProtocol.Message.newBuilder()
-        .setResponse(ClientProtocol.Response.newBuilder()
-            .setErrorResponse(ClientProtocol.ErrorResponse.newBuilder()
-                .setError(BasicTypes.Error.newBuilder()
-                    .setErrorCode(AUTHENTICATION_FAILED.codeValue).setMessage(SHOULD_HAVE_AUTHED))))
-        .build().writeDelimitedTo(outputStream);
-
-    throw new IOException(SHOULD_HAVE_AUTHED);
+  @Override
+  public Subject authenticate(Properties properties) throws AuthenticationFailedException {
+    return securityService.login(properties);
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthorizer.java
index 78d51c0..04149eb 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthorizer.java
@@ -20,7 +20,7 @@ import org.apache.shiro.util.ThreadState;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.internal.protocol.protobuf.security.Authorizer;
+import org.apache.geode.internal.protocol.security.Authorizer;
 
 public class ProtobufShiroAuthorizer implements Authorizer {
   private final SecurityService securityService;
@@ -30,14 +30,12 @@ public class ProtobufShiroAuthorizer implements Authorizer {
   }
 
   @Override
-  public boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested) {
-    ThreadState threadState = securityService.bindSubject((Subject) authenticatedSubject);
+  public boolean authorize(Object authenticatedToken, ResourcePermission permissionRequested) {
+    ThreadState threadState = securityService.bindSubject((Subject) authenticatedToken);
 
     try {
       securityService.authorize(permissionRequested);
       return true;
-    } catch (NotAuthorizedException ex) {
-      return false;
     } finally {
       threadState.restore();
     }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/exception/IncompatibleAuthenticationMechanismsException.java
similarity index 70%
copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/exception/IncompatibleAuthenticationMechanismsException.java
index 3cfb2db..1afecb0 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/exception/IncompatibleAuthenticationMechanismsException.java
@@ -12,10 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.protobuf.security.exception;
 
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.security.AuthenticationFailedException;
 
-public interface Authorizer {
-  boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested);
+public class IncompatibleAuthenticationMechanismsException extends AuthenticationFailedException {
+  public IncompatibleAuthenticationMechanismsException(String message) {
+    super(message);
+  }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java
new file mode 100644
index 0000000..0f48c22
--- /dev/null
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.protocol.protobuf.security.processors;
+
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.OperationContext;
+import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI;
+import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
+import org.apache.geode.security.AuthenticationRequiredException;
+
+public class AuthenticationSecurityProcessor implements SecurityProcessor<ClientProtocol.Request> {
+  @Override
+  public void validateOperation(ClientProtocol.Request request,
+      MessageExecutionContext messageExecutionContext, OperationContext operationContext) {
+    Object fromRequest = operationContext.getFromRequest().apply(request);
+    if (!(fromRequest instanceof AuthenticationAPI.AuthenticationRequest)) {
+      throw new AuthenticationRequiredException(
+          "Expecting an authentication message. Received a " + fromRequest.getClass() + " message");
+    }
+  }
+}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatisticsImpl.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatisticsImpl.java
index 24a3dbb..4868966 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatisticsImpl.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatisticsImpl.java
@@ -18,8 +18,10 @@ import org.apache.geode.StatisticDescriptor;
 import org.apache.geode.Statistics;
 import org.apache.geode.StatisticsFactory;
 import org.apache.geode.StatisticsType;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
 
-public class ProtobufClientStatisticsImpl implements ProtobufClientStatistics {
+public class ProtobufClientStatisticsImpl implements ProtocolClientStatistics {
+  public static final String PROTOBUF_CLIENT_STATISTICS = "ProtobufProtocolStats";
   private final StatisticsType statType;
   private final Statistics stats;
   private final int currentClientConnectionsId;
@@ -32,8 +34,7 @@ public class ProtobufClientStatisticsImpl implements ProtobufClientStatistics {
   private final int authorizationViolationsId;
   private final int authenticationFailuresId;
 
-  public ProtobufClientStatisticsImpl(StatisticsFactory statisticsFactory, String statisticsName,
-      String typeName) {
+  public ProtobufClientStatisticsImpl(StatisticsFactory statisticsFactory, String statisticsName) {
     StatisticDescriptor[] serverStatDescriptors = new StatisticDescriptor[] {
         statisticsFactory.createIntGauge("currentClientConnections",
             "Number of sockets accepted and used for client to server messaging.", "sockets"),
@@ -53,7 +54,7 @@ public class ProtobufClientStatisticsImpl implements ProtobufClientStatistics {
             "messages"),
         statisticsFactory.createLongCounter("messagesSent", "Messages sent to clients.",
             "messages")};
-    statType = statisticsFactory.createType(typeName, "Protobuf client/server statistics",
+    statType = statisticsFactory.createType(getStatsName(), "Protobuf client/server statistics",
         serverStatDescriptors);
     this.stats = statisticsFactory.createAtomicStatistics(statType, statisticsName);
     currentClientConnectionsId = this.stats.nameToId("currentClientConnections");
@@ -67,6 +68,12 @@ public class ProtobufClientStatisticsImpl implements ProtobufClientStatistics {
     messagesSentId = this.stats.nameToId("messagesSent");
   }
 
+
+  @Override
+  public String getStatsName() {
+    return PROTOBUF_CLIENT_STATISTICS;
+  }
+
   @Override
   public void clientConnected() {
     stats.incInt(currentClientConnectionsId, 1);
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java
index 6819d8b..663c31e 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java
@@ -16,14 +16,12 @@ package org.apache.geode.internal.protocol.protobuf.utilities;
 
 import java.util.Set;
 
-import org.apache.logging.log4j.Logger;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 
 
 /**
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java
index a44bf74..1053f64 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java
@@ -21,7 +21,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.protocol.protobuf.EncodingTypeTranslator;
+import org.apache.geode.internal.protocol.EncodingTypeTranslator;
 import org.apache.geode.internal.protocol.protobuf.ProtobufSerializationService;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
 import org.apache.geode.internal.protocol.protobuf.utilities.exception.UnknownProtobufPrimitiveType;
@@ -194,12 +194,6 @@ public abstract class ProtobufUtilities {
     return protoRegionBuilder.build();
   }
 
-  public static ClientProtocol.Request createProtobufRequestWithGetRegionNamesRequest(
-      RegionAPI.GetRegionNamesRequest getRegionNamesRequest) {
-    return ClientProtocol.Request.newBuilder().setGetRegionNamesRequest(getRegionNamesRequest)
-        .build();
-  }
-
   public static ClientProtocol.Request.Builder createProtobufRequestBuilder() {
     return ClientProtocol.Request.newBuilder();
   }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java
similarity index 63%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authenticator.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java
index 2873933..42dd22b 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authenticator.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java
@@ -12,15 +12,9 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.security.AuthenticationFailedException;
-import org.apache.geode.security.AuthenticationRequiredException;
 
 /**
  * Implementers of this interface do some message passing over a socket to authenticate a client,
@@ -29,15 +23,12 @@ import org.apache.geode.security.AuthenticationRequiredException;
  * If authentication fails, an implementor may continue to wait for another valid authentication
  * exchange.
  */
-public interface Authenticator {
+public interface Authenticator<SecurityProperties, AuthenticationToken> {
   /**
-   *
-   * @param inputStream to read auth messages from.
-   * @param outputStream to send messages to.
-   * @param securityService used for validating credentials.
+   * @param securityProperties a generic object that is required for authentication dependent on
+   *        implementation
    * @return authenticated principal
-   * @throws IOException if EOF or if invalid input is received.
    */
-  Object authenticate(InputStream inputStream, OutputStream outputStream,
-      SecurityService securityService) throws IOException, AuthenticationFailedException;
+  AuthenticationToken authenticate(SecurityProperties securityProperties)
+      throws AuthenticationFailedException;
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authorizer.java
similarity index 85%
copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authorizer.java
index 3cfb2db..525e42d 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authorizer.java
@@ -12,10 +12,10 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security;
 
 import org.apache.geode.security.ResourcePermission;
 
 public interface Authorizer {
-  boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested);
+  boolean authorize(Object authenticatedToken, ResourcePermission permissionRequested);
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java
similarity index 74%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthenticator.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java
index 116d92c..022fa30 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthenticator.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java
@@ -12,23 +12,23 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.security.AuthenticationFailedException;
 
 /**
  * An implementation of {@link Authenticator} that doesn't use its parameters and always returns
  * true.
  */
-public class NoOpAuthenticator implements Authenticator {
+public class NoOpAuthenticator implements Authenticator<Object, Object> {
+
   @Override
-  public Object authenticate(InputStream inputStream, OutputStream outputStream,
-      SecurityService securityService) throws IOException {
-    // this method needs to do nothing as it is a pass-through implementation
-    return new Object();
+  public Object authenticate(Object inputObject) throws AuthenticationFailedException {
+    return null;
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthorizer.java
similarity index 86%
copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java
copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthorizer.java
index 3add18c..61d0383 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthorizer.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security;
 
 import org.apache.geode.security.ResourcePermission;
 
@@ -21,7 +21,7 @@ import org.apache.geode.security.ResourcePermission;
  */
 public class NoOpAuthorizer implements Authorizer {
   @Override
-  public boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested) {
+  public boolean authorize(Object authenticatedToken, ResourcePermission permissionRequested) {
     return true;
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityLookupService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityLookupService.java
new file mode 100644
index 0000000..c4b54b0
--- /dev/null
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityLookupService.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.protocol.security;
+
+import org.apache.geode.internal.protocol.protobuf.security.InvalidConfigAuthenticator;
+import org.apache.geode.internal.protocol.protobuf.security.ProtobufShiroAuthenticator;
+import org.apache.geode.internal.protocol.protobuf.security.ProtobufShiroAuthorizer;
+import org.apache.geode.internal.protocol.protobuf.security.processors.AuthenticationSecurityProcessor;
+import org.apache.geode.internal.protocol.security.processors.NoAuthenticationSecurityProcessor;
+import org.apache.geode.internal.security.SecurityService;
+
+public class SecurityLookupService {
+  private final Authenticator[] authenticators = new Authenticator[3];
+  private final Authorizer[] authorizers = new Authorizer[2];
+  private final SecurityProcessor[] securityProcessors = new SecurityProcessor[2];
+
+  public SecurityLookupService() {
+    initializeAuthenticators();
+    initializeAuthortizers();
+    initializeSecurityProcessors();
+  }
+
+  private void initializeSecurityProcessors() {
+    securityProcessors[0] = new NoAuthenticationSecurityProcessor();
+    securityProcessors[1] = new AuthenticationSecurityProcessor();
+  }
+
+  private void initializeAuthenticators() {
+    authenticators[0] = new NoOpAuthenticator();
+    authenticators[1] = new InvalidConfigAuthenticator();
+  }
+
+  private void initializeAuthortizers() {
+    authorizers[0] = new NoOpAuthorizer();
+  }
+
+  public SecurityProcessor lookupProcessor(SecurityService securityService) {
+    return securityProcessors[isSecurityEnabled(securityService) ? 1 : 0];
+  }
+
+  public Authenticator lookupAuthenticator(SecurityService securityService) {
+    if (securityService.isIntegratedSecurity()) {
+      // no need to care about thread safety, eventually there will only be one authenticator
+      if (authenticators[2] == null) {
+        authenticators[2] = new ProtobufShiroAuthenticator(securityService);
+      }
+      // Simple authenticator...normal shiro
+      return authenticators[2];
+    }
+    if (isLegacySecurity(securityService)) {
+      // Failing authentication...legacy security
+      return authenticators[1];
+    } else {
+      // Noop authenticator...no security
+      return authenticators[0];
+    }
+  }
+
+  public Authorizer lookupAuthorizer(SecurityService securityService) {
+    if (securityService.isIntegratedSecurity()) {
+      // Simple authenticator...normal shiro
+      if (authorizers[1] == null) {
+        authorizers[1] = new ProtobufShiroAuthorizer(securityService);
+      }
+      // Simple authenticator...normal shiro
+      return authorizers[1];
+    }
+    if (isLegacySecurity(securityService)) {
+      // Failing authentication...legacy security
+      // This should never be called.
+      return null;
+    } else {
+      // Noop authenticator...no security
+      return authorizers[0];
+    }
+  }
+
+  private boolean isLegacySecurity(SecurityService securityService) {
+    return securityService.isPeerSecurityRequired() || securityService.isClientSecurityRequired();
+  }
+
+  private boolean isSecurityEnabled(SecurityService securityService) {
+    return securityService.isIntegratedSecurity() || isLegacySecurity(securityService);
+  }
+}
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java
similarity index 62%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java
index 3cfb2db..a60cd73 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/Authorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java
@@ -12,10 +12,15 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security;
 
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.OperationContext;
 
-public interface Authorizer {
-  boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested);
+public interface SecurityProcessor<RequestMessage> {
+  /**
+   * This method will validate an Operation. In the case of a failure, it will throw an exception.
+   */
+  void validateOperation(RequestMessage request, MessageExecutionContext messageExecutionContext,
+      OperationContext operationContext);
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/AuthorizationSecurityProcessor.java
similarity index 55%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/AuthorizationSecurityProcessor.java
index 3add18c..59d0084 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/NoOpAuthorizer.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/AuthorizationSecurityProcessor.java
@@ -12,16 +12,18 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.security;
+package org.apache.geode.internal.protocol.security.processors;
 
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.OperationContext;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
 
-/**
- * An implementation of {@link Authorizer} that doesn't use its parameters and always returns true.
- */
-public class NoOpAuthorizer implements Authorizer {
+public class AuthorizationSecurityProcessor implements SecurityProcessor<Object> {
   @Override
-  public boolean authorize(Object authenticatedSubject, ResourcePermission permissionRequested) {
-    return true;
+  public void validateOperation(Object request, MessageExecutionContext messageExecutionContext,
+      OperationContext operationContext) {
+    messageExecutionContext.getAuthorizer().authorize(
+        messageExecutionContext.getAuthenticationToken(),
+        operationContext.getAccessPermissionRequired());
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/NoAuthenticationSecurityProcessor.java
similarity index 60%
copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java
copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/NoAuthenticationSecurityProcessor.java
index e06ea8d..4ed23f5 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/processors/NoAuthenticationSecurityProcessor.java
@@ -12,36 +12,17 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.statistics;
+package org.apache.geode.internal.protocol.security.processors;
 
-public class NoOpStatistics implements ProtobufClientStatistics {
-  @Override
-  public void clientConnected() {
-
-  }
-
-  @Override
-  public void clientDisconnected() {
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.OperationContext;
+import org.apache.geode.internal.protocol.security.SecurityProcessor;
 
-  }
-
-  @Override
-  public void messageReceived(int bytes) {
-
-  }
+public class NoAuthenticationSecurityProcessor implements SecurityProcessor<Object> {
 
   @Override
-  public void messageSent(int bytes) {
-
-  }
-
-  @Override
-  public void incAuthorizationViolations() {
-
-  }
-
-  @Override
-  public void incAuthenticationFailures() {
-
+  public void validateOperation(Object request, MessageExecutionContext messageExecutionContext,
+      OperationContext operationContext) {
+    // A truly "no-op" operation :)
   }
 }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/NoOpStatistics.java
similarity index 89%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/NoOpStatistics.java
index e06ea8d..8bacd32 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpStatistics.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/NoOpStatistics.java
@@ -12,9 +12,9 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.statistics;
+package org.apache.geode.internal.protocol.statistics;
 
-public class NoOpStatistics implements ProtobufClientStatistics {
+public class NoOpStatistics implements ProtocolClientStatistics {
   @Override
   public void clientConnected() {
 
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatistics.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/ProtocolClientStatistics.java
similarity index 85%
rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatistics.java
rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/ProtocolClientStatistics.java
index a8070c7..9b6ca63 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/statistics/ProtobufClientStatistics.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/statistics/ProtocolClientStatistics.java
@@ -12,10 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf.statistics;
+package org.apache.geode.internal.protocol.statistics;
 
-public interface ProtobufClientStatistics {
-  String PROTOBUF_STATS_NAME = "ProtobufStats";
+public interface ProtocolClientStatistics {
+  default String getStatsName() {
+    return "ClientProtocolStats";
+  }
 
   void clientConnected();
 
diff --git a/geode-protobuf/src/main/proto/clientProtocol.proto b/geode-protobuf/src/main/proto/clientProtocol.proto
index b4c0f56..4d8b94a 100644
--- a/geode-protobuf/src/main/proto/clientProtocol.proto
+++ b/geode-protobuf/src/main/proto/clientProtocol.proto
@@ -48,7 +48,7 @@ message Request {
         GetRegionNamesRequest getRegionNamesRequest = 43;
         GetRegionRequest getRegionRequest = 44;
 
-        AuthenticationRequest simpleAuthenticationRequest = 100;
+        AuthenticationRequest authenticationRequest = 100;
     }
 }
 
@@ -67,7 +67,7 @@ message Response {
         GetRegionNamesResponse getRegionNamesResponse = 43;
         GetRegionResponse getRegionResponse = 44;
 
-        AuthenticationResponse simpleAuthenticationResponse = 100;
+        AuthenticationResponse authenticationResponse = 100;
     }
 }
 
diff --git a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.client.protocol.ClientProtocolService b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.client.protocol.ClientProtocolService
new file mode 100644
index 0000000..2db0521
--- /dev/null
+++ b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.client.protocol.ClientProtocolService
@@ -0,0 +1 @@
+org.apache.geode.internal.protocol.protobuf.ProtobufProtocolService
\ No newline at end of file
diff --git a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolService b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolService
deleted file mode 100644
index 207426a..0000000
--- a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolService
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.geode.internal.protocol.ProtobufProtocolService
\ No newline at end of file
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnectionTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnectionTest.java
index 8f16935..1414826 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnectionTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/GenericProtocolServerConnectionTest.java
@@ -28,8 +28,6 @@ import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.UnknownHostException;
 
-import org.apache.geode.distributed.internal.SecurityConfig;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.mockito.ArgumentCaptor;
@@ -38,6 +36,7 @@ import org.mockito.Mockito;
 import org.apache.geode.cache.IncompatibleVersionException;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
 import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.security.SecurityService;
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java
index adbe906..dabfa4c 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java
@@ -14,13 +14,11 @@
  */
 package org.apache.geode.internal.protocol;
 
-import static junit.framework.TestCase.fail;
-import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.AUTHENTICATION_FAILED;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.AUTHENTICATION_FAILED;
+import static org.apache.geode.internal.protocol.ProtocolErrorCode.UNSUPPORTED_AUTHENTICATION_MODE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,7 +27,6 @@ import java.net.Socket;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException;
 import org.awaitility.Awaitility;
 import org.junit.After;
 import org.junit.Before;
@@ -204,7 +201,7 @@ public class AuthenticationIntegrationTest {
 
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
                 .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME)
                 .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD)))
         .build();
@@ -232,7 +229,7 @@ public class AuthenticationIntegrationTest {
 
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
         .build();
 
     authenticationRequest.writeDelimitedTo(outputStream);
@@ -249,7 +246,7 @@ public class AuthenticationIntegrationTest {
 
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
                 .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME)
                 .putCredentials(ResourceConstants.PASSWORD, "wrong password")))
         .build();
@@ -279,7 +276,7 @@ public class AuthenticationIntegrationTest {
 
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
         .build();
 
     authenticationRequest.writeDelimitedTo(outputStream);
@@ -287,7 +284,7 @@ public class AuthenticationIntegrationTest {
     ClientProtocol.Message errorResponse = protobufProtocolSerializer.deserialize(inputStream);
     assertEquals(ClientProtocol.Response.ResponseAPICase.ERRORRESPONSE,
         errorResponse.getResponse().getResponseAPICase());
-    assertEquals(AUTHENTICATION_FAILED.codeValue,
+    assertEquals(UNSUPPORTED_AUTHENTICATION_MODE.codeValue,
         errorResponse.getResponse().getErrorResponse().getError().getErrorCode());
   }
 
@@ -298,7 +295,7 @@ public class AuthenticationIntegrationTest {
 
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()))
         .build();
 
     authenticationRequest.writeDelimitedTo(outputStream);
@@ -306,7 +303,7 @@ public class AuthenticationIntegrationTest {
     ClientProtocol.Message errorResponse = protobufProtocolSerializer.deserialize(inputStream);
     assertEquals(ClientProtocol.Response.ResponseAPICase.ERRORRESPONSE,
         errorResponse.getResponse().getResponseAPICase());
-    assertEquals(AUTHENTICATION_FAILED.codeValue,
+    assertEquals(UNSUPPORTED_AUTHENTICATION_MODE.codeValue,
         errorResponse.getResponse().getErrorResponse().getError().getErrorCode());
   }
 
@@ -332,8 +329,8 @@ public class AuthenticationIntegrationTest {
         ClientProtocol.Message.parseDelimitedFrom(inputStream);
     assertEquals(ClientProtocol.Message.RESPONSE_FIELD_NUMBER,
         authenticationResponseMessage.getMessageTypeCase().getNumber());
-    assertEquals(ClientProtocol.Response.SIMPLEAUTHENTICATIONRESPONSE_FIELD_NUMBER,
+    assertEquals(ClientProtocol.Response.AUTHENTICATIONRESPONSE_FIELD_NUMBER,
         authenticationResponseMessage.getResponse().getResponseAPICase().getNumber());
-    return authenticationResponseMessage.getResponse().getSimpleAuthenticationResponse();
+    return authenticationResponseMessage.getResponse().getAuthenticationResponse();
   }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java
index b41b93c..109e10d 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java
@@ -43,7 +43,6 @@ import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 import org.apache.geode.internal.protocol.protobuf.ProtobufSerializationService;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
 import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
@@ -116,7 +115,7 @@ public class AuthorizationIntegrationTest {
     when(mockSecurityManager.authorize(same(securityPrincipal), any())).thenReturn(false);
     ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
                 .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME)
                 .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD)))
         .build();
@@ -125,10 +124,10 @@ public class AuthorizationIntegrationTest {
     ClientProtocol.Message responseMessage = ClientProtocol.Message.parseDelimitedFrom(inputStream);
     assertEquals(ClientProtocol.Message.RESPONSE_FIELD_NUMBER,
         responseMessage.getMessageTypeCase().getNumber());
-    assertEquals(ClientProtocol.Response.SIMPLEAUTHENTICATIONRESPONSE_FIELD_NUMBER,
+    assertEquals(ClientProtocol.Response.AUTHENTICATIONRESPONSE_FIELD_NUMBER,
         responseMessage.getResponse().getResponseAPICase().getNumber());
     AuthenticationAPI.AuthenticationResponse authenticationResponse =
-        responseMessage.getResponse().getSimpleAuthenticationResponse();
+        responseMessage.getResponse().getAuthenticationResponse();
     assertTrue(authenticationResponse.getAuthenticated());
   }
 
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufTestExecutionContext.java
similarity index 51%
rename from geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java
rename to geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufTestExecutionContext.java
index 56beb0e..fc7a081 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufTestExecutionContext.java
@@ -12,21 +12,22 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol.protobuf;
+package org.apache.geode.internal.protocol;
 
-import com.google.protobuf.GeneratedMessageV3;
 import org.apache.geode.cache.Cache;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.security.NoOpAuthorizer;
-import org.apache.geode.internal.protocol.protobuf.statistics.NoOpStatistics;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
+import org.apache.geode.distributed.internal.InternalLocator;
+import org.apache.geode.internal.protocol.security.NoOpAuthenticator;
+import org.apache.geode.internal.protocol.security.NoOpAuthorizer;
+import org.apache.geode.internal.protocol.security.processors.NoAuthenticationSecurityProcessor;
+import org.apache.geode.internal.protocol.statistics.NoOpStatistics;
 
 public class ProtobufTestExecutionContext {
-  public static MessageExecutionContext getNoAuthExecutionContext(Cache cache) {
-    return new MessageExecutionContext(cache, new NoOpAuthorizer(), new Object(),
-        new NoOpStatistics());
+  public static MessageExecutionContext getNoAuthCacheExecutionContext(Cache cache) {
+    return new MessageExecutionContext(cache, new NoOpAuthenticator(), new NoOpAuthorizer(),
+        new Object(), new NoOpStatistics(), new NoAuthenticationSecurityProcessor());
+  }
+
+  public static MessageExecutionContext getLocatorExecutionContext(InternalLocator locator) {
+    return new MessageExecutionContext(locator, new NoOpStatistics());
   }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheConnectionJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheConnectionJUnitTest.java
index a7d0313..4a76966 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheConnectionJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheConnectionJUnitTest.java
@@ -34,7 +34,6 @@ import java.util.Collection;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.geode.distributed.internal.SecurityConfig;
 import org.awaitility.Awaitility;
 import org.junit.After;
 import org.junit.Before;
@@ -67,7 +66,8 @@ import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
 import org.apache.geode.internal.protocol.protobuf.ProtobufSerializationService;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
 import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatisticsImpl;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
 import org.apache.geode.internal.serialization.SerializationService;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 import org.apache.geode.util.test.TestUtil;
@@ -170,7 +170,7 @@ public class CacheConnectionJUnitTest {
     InternalDistributedSystem distributedSystem =
         (InternalDistributedSystem) cache.getDistributedSystem();
     Statistics[] protobufStats = distributedSystem.findStatisticsByType(
-        distributedSystem.findType(ProtobufClientStatistics.PROTOBUF_STATS_NAME));
+        distributedSystem.findType(ProtobufClientStatisticsImpl.PROTOBUF_CLIENT_STATISTICS));
     assertEquals(1, protobufStats.length);
     Statistics statistics = protobufStats[0];
     assertEquals(1, statistics.get("currentClientConnections"));
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheOperationsJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheOperationsJUnitTest.java
index 08d648f..d5638ca 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheOperationsJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/CacheOperationsJUnitTest.java
@@ -251,8 +251,9 @@ public class CacheOperationsJUnitTest {
     RegionAPI.GetRegionNamesRequest getRegionNamesRequest =
         ProtobufRequestUtilities.createGetRegionNamesRequest();
 
-    ClientProtocol.Message getRegionsMessage = ProtobufUtilities.createProtobufMessage(
-        ProtobufUtilities.createProtobufRequestWithGetRegionNamesRequest(getRegionNamesRequest));
+    ClientProtocol.Message getRegionsMessage =
+        ProtobufUtilities.createProtobufMessage(ClientProtocol.Request.newBuilder()
+            .setGetRegionNamesRequest(getRegionNamesRequest).build());
     protobufProtocolSerializer.serialize(getRegionsMessage, outputStream);
     validateGetRegionNamesResponse(socket, protobufProtocolSerializer);
   }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java
index b4be1b6..3d239b5 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java
@@ -37,10 +37,10 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.ServerAPI;
 import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer;
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatisticsImpl;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.test.dunit.DistributedTestUtils;
@@ -166,7 +166,7 @@ public class LocatorConnectionDUnitTest extends JUnit4CacheTestCase {
         (InternalDistributedSystem) Locator.getLocator().getDistributedSystem();
 
     Statistics[] protobufServerStats = distributedSystem.findStatisticsByType(
-        distributedSystem.findType(ProtobufClientStatistics.PROTOBUF_STATS_NAME));
+        distributedSystem.findType(ProtobufClientStatisticsImpl.PROTOBUF_CLIENT_STATISTICS));
     assertEquals(1, protobufServerStats.length);
     return protobufServerStats[0];
   }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java
index 883b0f6..0a67aff 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java
@@ -19,6 +19,7 @@ import static org.junit.Assert.assertSame;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.internal.protocol.EncodingTypeTranslator;
 import org.apache.geode.internal.serialization.SerializationType;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.test.junit.categories.UnitTest;
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufProtocolServiceJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolServiceJUnitTest.java
similarity index 81%
rename from geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufProtocolServiceJUnitTest.java
rename to geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolServiceJUnitTest.java
index d952f0f..52b78d0 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/ProtobufProtocolServiceJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufProtocolServiceJUnitTest.java
@@ -12,14 +12,15 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.protocol;
+package org.apache.geode.internal.protocol.protobuf;
 
 import static org.junit.Assert.*;
 
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatistics;
+import org.apache.geode.internal.protocol.protobuf.ProtobufProtocolService;
+import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics;
 import org.apache.geode.internal.statistics.DummyStatisticsFactory;
 import org.apache.geode.test.junit.categories.UnitTest;
 
@@ -29,9 +30,9 @@ public class ProtobufProtocolServiceJUnitTest {
   public void initializeStatistics() {
     ProtobufProtocolService service = new ProtobufProtocolService();
     service.initializeStatistics("first", new DummyStatisticsFactory());
-    ProtobufClientStatistics firstStatistics = service.getStatistics();
+    ProtocolClientStatistics firstStatistics = service.getStatistics();
     service.initializeStatistics("second", new DummyStatisticsFactory());
-    ProtobufClientStatistics secondStatistics = service.getStatistics();
+    ProtocolClientStatistics secondStatistics = service.getStatistics();
     assertEquals(firstStatistics, secondStatistics);
   }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java
index 1972e31..1dfdfd7 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java
@@ -16,6 +16,7 @@
 package org.apache.geode.internal.protocol.protobuf;
 
 import static junit.framework.TestCase.fail;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -40,8 +41,8 @@ import org.apache.geode.test.junit.categories.UnitTest;
 public class ProtobufShiroAuthenticatorJUnitTest {
   private static final String TEST_USERNAME = "user1";
   private static final String TEST_PASSWORD = "hunter2";
-  private ByteArrayInputStream byteArrayInputStream; // initialized with an incoming request in
-                                                     // setUp.
+  // initialized with an incoming request in setUp.
+  private ByteArrayInputStream byteArrayInputStream;
   private ByteArrayOutputStream byteArrayOutputStream;
   private ProtobufShiroAuthenticator protobufShiroAuthenticator;
   private SecurityService mockSecurityService;
@@ -52,7 +53,7 @@ public class ProtobufShiroAuthenticatorJUnitTest {
   public void setUp() throws IOException {
     ClientProtocol.Message basicAuthenticationRequest = ClientProtocol.Message.newBuilder()
         .setRequest(ClientProtocol.Request.newBuilder()
-            .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
+            .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder()
                 .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME)
                 .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD)))
         .build();
@@ -70,18 +71,19 @@ public class ProtobufShiroAuthenticatorJUnitTest {
     mockSecurityService = mock(SecurityService.class);
     when(mockSecurityService.login(expectedAuthProperties)).thenReturn(mockSecuritySubject);
 
-    protobufShiroAuthenticator = new ProtobufShiroAuthenticator();
+    protobufShiroAuthenticator = new ProtobufShiroAuthenticator(mockSecurityService);
   }
 
   @Test
   public void successfulAuthentication() throws IOException {
-    protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream,
-        mockSecurityService);
 
-    AuthenticationAPI.AuthenticationResponse authenticationResponse =
-        getSimpleAuthenticationResponse(byteArrayOutputStream);
+    Properties properties = new Properties();
+    properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME);
+    properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD);
 
-    assertTrue(authenticationResponse.getAuthenticated());
+    Subject authenticate = protobufShiroAuthenticator.authenticate(properties);
+
+    assertNotNull(authenticate);
   }
 
   @Test(expected = AuthenticationFailedException.class)
@@ -89,8 +91,11 @@ public class ProtobufShiroAuthenticatorJUnitTest {
     when(mockSecurityService.login(expectedAuthProperties))
         .thenThrow(new AuthenticationFailedException("BOOM!"));
 
-    protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream,
-        mockSecurityService);
+    Properties properties = new Properties();
+    properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME);
+    properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD);
+
+    protobufShiroAuthenticator.authenticate(properties);
   }
 
   @Test
@@ -99,19 +104,12 @@ public class ProtobufShiroAuthenticatorJUnitTest {
     when(mockSecurityService.isClientSecurityRequired()).thenReturn(false);
     when(mockSecurityService.isPeerSecurityRequired()).thenReturn(false);
 
-    protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream,
-        mockSecurityService);
+    Properties properties = new Properties();
+    properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME);
+    properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD);
 
-    AuthenticationAPI.AuthenticationResponse authenticationResponse =
-        getSimpleAuthenticationResponse(byteArrayOutputStream);
-
-    assertTrue(authenticationResponse.getAuthenticated());
-  }
+    Subject authenticate = protobufShiroAuthenticator.authenticate(properties);
 
-  private AuthenticationAPI.AuthenticationResponse getSimpleAuthenticationResponse(
-      ByteArrayOutputStream outputStream) throws IOException {
-    ByteArrayInputStream responseStream = new ByteArrayInputStream(outputStream.toByteArray());
-    return ClientProtocol.Message.parseDelimitedFrom(responseStream).getResponse()
-        .getSimpleAuthenticationResponse();
+    assertNotNull(authenticate);
   }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
index 54b4e54..d56de00 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java
@@ -15,10 +15,9 @@
 package org.apache.geode.internal.protocol.protobuf;
 
 import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.security.NoOpAuthorizer;
-import org.apache.geode.internal.protocol.protobuf.statistics.NoOpStatistics;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
 import org.apache.geode.test.junit.categories.UnitTest;
+
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -39,7 +38,7 @@ public class ProtobufStreamProcessorTest {
 
     ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor();
     InternalCache mockInternalCache = mock(InternalCache.class);
-    protobufStreamProcessor.receiveMessage(inputStream, outputStream, new MessageExecutionContext(
-        mockInternalCache, new NoOpAuthorizer(), new Object(), new NoOpStatistics()));
+    protobufStreamProcessor.receiveMessage(inputStream, outputStream,
+        ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(mockInternalCache));
   }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java
index 86ad5af..bcd98c3 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java
@@ -35,10 +35,10 @@ import org.apache.geode.cache.CacheLoaderException;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
@@ -78,7 +78,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
   public void processReturnsExpectedValuesForValidKeys() throws Exception {
     Result<RegionAPI.GetAllResponse> result =
         operationHandler.process(serializationServiceStub, generateTestRequest(true, false),
-            ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
 
@@ -99,7 +99,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
       CodecNotRegisteredForTypeException, InvalidExecutionContextException {
     Result<RegionAPI.GetAllResponse> result =
         operationHandler.process(serializationServiceStub, generateTestRequest(false, false),
-            ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
 
@@ -116,7 +116,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
     RegionAPI.GetAllRequest getAllRequest =
         ProtobufRequestUtilities.createGetAllRequest(TEST_REGION, testKeys);
     Result<RegionAPI.GetAllResponse> result = operationHandler.process(serializationServiceStub,
-        getAllRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getAllRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
     RegionAPI.GetAllResponse message = result.getMessage();
@@ -132,7 +132,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
       CodecNotRegisteredForTypeException, InvalidExecutionContextException {
     Result<RegionAPI.GetAllResponse> result =
         operationHandler.process(serializationServiceStub, generateTestRequest(true, true),
-            ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
 
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java
index 5f724d6..6e26fda 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java
@@ -19,15 +19,17 @@ import org.apache.geode.distributed.internal.LocatorLoadSnapshot;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.ServerLocator;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
-import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext;
+import org.apache.geode.internal.protocol.MessageExecutionContext;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Result;
+import org.apache.geode.internal.protocol.Result;
 import org.apache.geode.internal.protocol.protobuf.ServerAPI;
 import org.apache.geode.internal.protocol.protobuf.ServerAPI.GetAvailableServersResponse;
-import org.apache.geode.internal.protocol.protobuf.Success;
-import org.apache.geode.internal.protocol.protobuf.statistics.NoOpStatistics;
+import org.apache.geode.internal.protocol.Success;
+import org.apache.geode.internal.protocol.statistics.NoOpStatistics;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.test.junit.categories.UnitTest;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -61,7 +63,6 @@ public class GetAvailableServersOperationHandlerJUnitTest extends OperationHandl
     ServerLocator serverLocatorAdviseeMock = mock(ServerLocator.class);
     locatorLoadSnapshot = mock(LocatorLoadSnapshot.class);
 
-
     when(internalLocatorMock.getServerLocatorAdvisee()).thenReturn(serverLocatorAdviseeMock);
     when(serverLocatorAdviseeMock.getLoadSnapshot()).thenReturn(locatorLoadSnapshot);
   }
@@ -75,9 +76,7 @@ public class GetAvailableServersOperationHandlerJUnitTest extends OperationHandl
 
     ServerAPI.GetAvailableServersRequest getAvailableServersRequest =
         ProtobufRequestUtilities.createGetAvailableServersRequest();
-    Result operationHandlerResult =
-        operationHandler.process(serializationServiceStub, getAvailableServersRequest,
-            new MessageExecutionContext(internalLocatorMock, new NoOpStatistics()));
+    Result operationHandlerResult = getOperationHandlerResult(getAvailableServersRequest);
     assertTrue(operationHandlerResult instanceof Success);
     ValidateGetAvailableServersResponse(
         (GetAvailableServersResponse) operationHandlerResult.getMessage());
@@ -90,15 +89,20 @@ public class GetAvailableServersOperationHandlerJUnitTest extends OperationHandl
 
     ServerAPI.GetAvailableServersRequest getAvailableServersRequest =
         ProtobufRequestUtilities.createGetAvailableServersRequest();
-    Result operationHandlerResult =
-        operationHandler.process(serializationServiceStub, getAvailableServersRequest,
-            new MessageExecutionContext(internalLocatorMock, new NoOpStatistics()));
+    Result operationHandlerResult = getOperationHandlerResult(getAvailableServersRequest);
     assertTrue(operationHandlerResult instanceof Success);
     GetAvailableServersResponse availableServersResponse =
         (GetAvailableServersResponse) operationHandlerResult.getMessage();
     assertEquals(0, availableServersResponse.getServersCount());
   }
 
+  private Result getOperationHandlerResult(
+      ServerAPI.GetAvailableServersRequest getAvailableServersRequest)
+      throws InvalidExecutionContextException {
+    return operationHandler.process(serializationServiceStub, getAvailableServersRequest,
+        ProtobufTestExecutionContext.getLocatorExecutionContext(internalLocatorMock));
+  }
+
   private void ValidateGetAvailableServersResponse(
       GetAvailableServersResponse getAvailableServersResponse) {
     assertEquals(2, getAvailableServersResponse.getServersCount());
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java
index 3c0c913..5e09ec6 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java
@@ -14,10 +14,12 @@
  */
 package org.apache.geode.internal.protocol.protobuf.operations;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext.getNoAuthExecutionContext;
+import static org.apache.geode.internal.Assert.assertTrue;
+import static org.apache.geode.internal.protocol.ProtobufTestExecutionContext.getNoAuthCacheExecutionContext;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -31,8 +33,8 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.exception.InvalidExecutionContextException;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
 import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException;
@@ -65,7 +67,7 @@ public class GetRegionNamesRequestOperationHandlerJUnitTest extends OperationHan
       CodecNotRegisteredForTypeException, InvalidExecutionContextException {
     Result<RegionAPI.GetRegionNamesResponse> result = operationHandler.process(
         serializationServiceStub, ProtobufRequestUtilities.createGetRegionNamesRequest(),
-        getNoAuthExecutionContext(cacheStub));
+        getNoAuthCacheExecutionContext(cacheStub));
     Assert.assertTrue(result instanceof Success);
 
     RegionAPI.GetRegionNamesResponse getRegionsResponse = result.getMessage();
@@ -76,10 +78,15 @@ public class GetRegionNamesRequestOperationHandlerJUnitTest extends OperationHan
     String name2 = getRegionsResponse.getRegions(1);
     String name3 = getRegionsResponse.getRegions(2);
     Assert.assertTrue("The same region was returned multiple times",
-        name1 != name2 && name1 != name3 && name2 != name3);
-    Assert.assertTrue(name1 == TEST_REGION1 || name1 == TEST_REGION2 || name1 == TEST_REGION3);
-    Assert.assertTrue(name2 == TEST_REGION1 || name2 == TEST_REGION2 || name2 == TEST_REGION3);
-    Assert.assertTrue(name3 == TEST_REGION1 || name3 == TEST_REGION2 || name3 == TEST_REGION3);
+        !name1.equals(name2) && !name1.equals(name3) && !name2.equals(name3));
+    ArrayList arrayList = new ArrayList();
+    arrayList.add(TEST_REGION1);
+    arrayList.add(TEST_REGION2);
+    arrayList.add(TEST_REGION3);
+
+    assertTrue(arrayList.contains(name1));
+    assertTrue(arrayList.contains(name2));
+    assertTrue(arrayList.contains(name3));
   }
 
   @Test
@@ -89,7 +96,7 @@ public class GetRegionNamesRequestOperationHandlerJUnitTest extends OperationHan
         .thenReturn(Collections.unmodifiableSet(new HashSet<Region<String, String>>()));
     Result<RegionAPI.GetRegionNamesResponse> result = operationHandler.process(
         serializationServiceStub, ProtobufRequestUtilities.createGetRegionNamesRequest(),
-        getNoAuthExecutionContext(emptyCache));
+        getNoAuthCacheExecutionContext(emptyCache));
     Assert.assertTrue(result instanceof Success);
 
     RegionAPI.GetRegionNamesResponse getRegionsResponse = result.getMessage();
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java
index 2e7979c..6775f06 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.protocol.protobuf.operations;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext.getNoAuthExecutionContext;
+import static org.apache.geode.internal.protocol.ProtobufTestExecutionContext.getNoAuthCacheExecutionContext;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -34,10 +34,10 @@ import org.apache.geode.cache.Scope;
 import org.apache.geode.internal.protocol.MessageUtil;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
+import org.apache.geode.internal.protocol.Result;
 import org.apache.geode.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
@@ -70,7 +70,7 @@ public class GetRegionRequestOperationHandlerJUnitTest extends OperationHandlerJ
 
 
     Result<RegionAPI.GetRegionResponse> result = operationHandler.process(serializationServiceStub,
-        MessageUtil.makeGetRegionRequest(TEST_REGION1), getNoAuthExecutionContext(cacheStub));
+        MessageUtil.makeGetRegionRequest(TEST_REGION1), getNoAuthCacheExecutionContext(cacheStub));
     RegionAPI.GetRegionResponse response = result.getMessage();
     BasicTypes.Region region = response.getRegion();
     Assert.assertEquals(TEST_REGION1, region.getName());
@@ -93,7 +93,8 @@ public class GetRegionRequestOperationHandlerJUnitTest extends OperationHandlerJ
         .thenReturn(Collections.unmodifiableSet(new HashSet<Region<String, String>>()));
     String unknownRegionName = "UNKNOWN_REGION";
     Result<RegionAPI.GetRegionResponse> result = operationHandler.process(serializationServiceStub,
-        MessageUtil.makeGetRegionRequest(unknownRegionName), getNoAuthExecutionContext(emptyCache));
+        MessageUtil.makeGetRegionRequest(unknownRegionName),
+        getNoAuthCacheExecutionContext(emptyCache));
     Assert.assertTrue(result instanceof Failure);
     Assert.assertEquals(ProtocolErrorCode.REGION_NOT_FOUND.codeValue,
         result.getErrorMessage().getError().getErrorCode());
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java
index 8064475..302232c 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java
@@ -26,12 +26,12 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
@@ -67,7 +67,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   public void processReturnsTheEncodedValueFromTheRegion() throws Exception {
     RegionAPI.GetRequest getRequest = generateTestRequest(false, false, false);
     Result<RegionAPI.GetResponse> result = operationHandler.process(serializationServiceStub,
-        getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(result instanceof Success);
     Assert.assertEquals(BasicTypes.EncodedValue.ValueCase.STRINGRESULT,
@@ -80,7 +80,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   public void processReturnsUnsucessfulResponseForInvalidRegion() throws Exception {
     RegionAPI.GetRequest getRequest = generateTestRequest(true, false, false);
     Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub,
-        getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(response instanceof Failure);
     Assert.assertEquals(ProtocolErrorCode.REGION_NOT_FOUND.codeValue,
@@ -91,7 +91,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   public void processReturnsKeyNotFoundWhenKeyIsNotFound() throws Exception {
     RegionAPI.GetRequest getRequest = generateTestRequest(false, true, false);
     Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub,
-        getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(response instanceof Success);
   }
@@ -100,7 +100,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   public void processReturnsLookupFailureWhenKeyFoundWithNoValue() throws Exception {
     RegionAPI.GetRequest getRequest = generateTestRequest(false, false, true);
     Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub,
-        getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(response instanceof Success);
   }
@@ -119,7 +119,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
     RegionAPI.GetRequest getRequest =
         ProtobufRequestUtilities.createGetRequest(TEST_REGION, encodedKey).getGetRequest();
     Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub,
-        getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        getRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(response instanceof Failure);
     Assert.assertEquals(ProtocolErrorCode.VALUE_ENCODING_ERROR.codeValue,
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java
index 9e1d7a5..80b15ff 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.protocol.protobuf.operations;
 
-import static org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext.getNoAuthExecutionContext;
+import static org.apache.geode.internal.protocol.ProtobufTestExecutionContext.getNoAuthCacheExecutionContext;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.any;
@@ -33,8 +33,8 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
@@ -71,7 +71,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
     PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler();
 
     Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(false, true), getNoAuthExecutionContext(cacheStub));
+        generateTestRequest(false, true), getNoAuthCacheExecutionContext(cacheStub));
 
     Assert.assertTrue(result instanceof Success);
 
@@ -85,7 +85,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
     PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler();
 
     Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(true, true), getNoAuthExecutionContext(cacheStub));
+        generateTestRequest(true, true), getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
     verify(regionMock).put(TEST_KEY1, TEST_VALUE1);
@@ -104,7 +104,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni
     PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler();
 
     Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(false, false), getNoAuthExecutionContext(cacheStub));
+        generateTestRequest(false, false), getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
 
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java
index b90982c..04ce826 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java
@@ -30,12 +30,12 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
@@ -62,8 +62,9 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   @Test
   public void test_puttingTheEncodedEntryIntoRegion() throws Exception {
     PutRequestOperationHandler operationHandler = new PutRequestOperationHandler();
-    Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+    Result<RegionAPI.PutResponse> result =
+        operationHandler.process(serializationServiceStub, generateTestRequest(),
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
 
@@ -92,7 +93,7 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
     RegionAPI.PutRequest putRequest =
         ProtobufRequestUtilities.createPutRequest(TEST_REGION, testEntry).getPutRequest();
     Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub,
-        putRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        putRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Failure);
     assertEquals(ProtocolErrorCode.VALUE_ENCODING_ERROR.codeValue,
@@ -103,8 +104,9 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
   public void test_RegionNotFound() throws Exception {
     when(cacheStub.getRegion(TEST_REGION)).thenReturn(null);
     PutRequestOperationHandler operationHandler = new PutRequestOperationHandler();
-    Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+    Result<RegionAPI.PutResponse> result =
+        operationHandler.process(serializationServiceStub, generateTestRequest(),
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Failure);
     assertEquals(ProtocolErrorCode.REGION_NOT_FOUND.codeValue,
@@ -116,8 +118,9 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe
     when(regionMock.put(any(), any())).thenThrow(ClassCastException.class);
 
     PutRequestOperationHandler operationHandler = new PutRequestOperationHandler();
-    Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub,
-        generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+    Result<RegionAPI.PutResponse> result =
+        operationHandler.process(serializationServiceStub, generateTestRequest(),
+            ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Failure);
     assertEquals(ProtocolErrorCode.CONSTRAINT_VIOLATION.codeValue,
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java
index 5bfad23..3b8fc66 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java
@@ -29,12 +29,12 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.protocol.protobuf.BasicTypes;
 import org.apache.geode.internal.protocol.protobuf.ClientProtocol;
-import org.apache.geode.internal.protocol.protobuf.Failure;
-import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext;
-import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode;
+import org.apache.geode.internal.protocol.Failure;
+import org.apache.geode.internal.protocol.ProtobufTestExecutionContext;
+import org.apache.geode.internal.protocol.ProtocolErrorCode;
 import org.apache.geode.internal.protocol.protobuf.RegionAPI;
-import org.apache.geode.internal.protocol.protobuf.Result;
-import org.apache.geode.internal.protocol.protobuf.Success;
+import org.apache.geode.internal.protocol.Result;
+import org.apache.geode.internal.protocol.Success;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities;
 import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities;
 import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException;
@@ -68,7 +68,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni
   public void processValidKeyRemovesTheEntryAndReturnSuccess() throws Exception {
     RegionAPI.RemoveRequest removeRequest = generateTestRequest(false, false).getRemoveRequest();
     Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub,
-        removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        removeRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
     verify(regionStub).remove(TEST_KEY);
@@ -78,7 +78,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni
   public void processReturnsUnsucessfulResponseForInvalidRegion() throws Exception {
     RegionAPI.RemoveRequest removeRequest = generateTestRequest(true, false).getRemoveRequest();
     Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub,
-        removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        removeRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Failure);
     assertEquals(ProtocolErrorCode.REGION_NOT_FOUND.codeValue,
@@ -89,7 +89,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni
   public void processReturnsSuccessWhenKeyIsNotFound() throws Exception {
     RegionAPI.RemoveRequest removeRequest = generateTestRequest(false, true).getRemoveRequest();
     Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub,
-        removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        removeRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Success);
   }
@@ -109,7 +109,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni
     RegionAPI.RemoveRequest removeRequest =
         ProtobufRequestUtilities.createRemoveRequest(TEST_REGION, encodedKey).getRemoveRequest();;
     Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub,
-        removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub));
+        removeRequest, ProtobufTestExecutionContext.getNoAuthCacheExecutionContext(cacheStub));
 
     assertTrue(result instanceof Failure);
     assertEquals(ProtocolErrorCode.VALUE_ENCODING_ERROR.codeValue,

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.