Class AbstractStoreAclHandler<REQUEST_TYPE>

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpRequest>
com.linkedin.venice.acl.handler.AbstractStoreAclHandler<REQUEST_TYPE>
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler
Direct Known Subclasses:
RouterStoreAclHandler, ServerStoreAclHandler

@Sharable public abstract class AbstractStoreAclHandler<REQUEST_TYPE> extends io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpRequest>
Store-level access control handler, which is being used by both Router and Server.
  • Field Details

    • STORE_ACL_CHECK_RESULT

      public static final String STORE_ACL_CHECK_RESULT
      See Also:
    • STORE_ACL_CHECK_RESULT_ATTRIBUTE_KEY

      public static final io.netty.util.AttributeKey<VeniceConcurrentHashMap<String,com.linkedin.venice.acl.handler.AbstractStoreAclHandler.CachedAcl>> STORE_ACL_CHECK_RESULT_ATTRIBUTE_KEY
  • Constructor Details

  • Method Details

    • channelRead0

      public void channelRead0(io.netty.channel.ChannelHandlerContext ctx, io.netty.handler.codec.http.HttpRequest req) throws SSLPeerUnverifiedException
      Verify if client has permission to access.
      Specified by:
      channelRead0 in class io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpRequest>
      Parameters:
      ctx -
      req -
      Throws:
      SSLPeerUnverifiedException
    • isAccessAlreadyApproved

      protected boolean isAccessAlreadyApproved(io.netty.channel.Channel originalChannel)
    • needsAclValidation

      protected abstract boolean needsAclValidation(REQUEST_TYPE requestType)
    • extractStoreName

      protected abstract String extractStoreName(REQUEST_TYPE requestType, String[] requestParts)
    • validateRequest

      protected abstract REQUEST_TYPE validateRequest(String[] requestParts)
      Validate the request and return the request type. If the request is invalid, return null
      Parameters:
      requestParts - the parts of the request URI
      Returns:
      the request type; null if the request is invalid
    • checkAccess

      protected AccessResult checkAccess(String uri, X509Certificate clientCert, String storeName, String method)
      N.B.: This function is called on the hot path, so it's important to make it as efficient as possible. The order of operations is carefully considered so that short-circuiting comes into play as much as possible. We also try to minimize the overhead of logging wherever possible (e.g., by minimizing expensive calls, such as the one to IdentityParser.parseIdentityFromCert(X509Certificate)).