public abstract class io.vertx.ext.web.handler.impl.AuthHandlerImpl implements io.vertx.ext.web.handler.AuthHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: io.vertx.ext.web.handler.impl.AuthHandlerImpl
  super_class: java.lang.Object
{
  static final java.lang.String AUTH_PROVIDER_CONTEXT_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: "io.vertx.ext.web.handler.AuthHandler.provider"

  static final io.vertx.ext.web.handler.impl.HttpStatusException FORBIDDEN;
    descriptor: Lio/vertx/ext/web/handler/impl/HttpStatusException;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final io.vertx.ext.web.handler.impl.HttpStatusException UNAUTHORIZED;
    descriptor: Lio/vertx/ext/web/handler/impl/HttpStatusException;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final io.vertx.ext.web.handler.impl.HttpStatusException BAD_REQUEST;
    descriptor: Lio/vertx/ext/web/handler/impl/HttpStatusException;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  protected final java.lang.String realm;
    descriptor: Ljava/lang/String;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final io.vertx.ext.auth.AuthProvider authProvider;
    descriptor: Lio/vertx/ext/auth/AuthProvider;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final java.util.Set<java.lang.String> authorities;
    descriptor: Ljava/util/Set;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/String;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 43
            new io.vertx.ext.web.handler.impl.HttpStatusException
            dup
            sipush 403
            invokespecial io.vertx.ext.web.handler.impl.HttpStatusException.<init>:(I)V
            putstatic io.vertx.ext.web.handler.impl.AuthHandlerImpl.FORBIDDEN:Lio/vertx/ext/web/handler/impl/HttpStatusException;
         1: .line 44
            new io.vertx.ext.web.handler.impl.HttpStatusException
            dup
            sipush 401
            invokespecial io.vertx.ext.web.handler.impl.HttpStatusException.<init>:(I)V
            putstatic io.vertx.ext.web.handler.impl.AuthHandlerImpl.UNAUTHORIZED:Lio/vertx/ext/web/handler/impl/HttpStatusException;
         2: .line 45
            new io.vertx.ext.web.handler.impl.HttpStatusException
            dup
            sipush 400
            invokespecial io.vertx.ext.web.handler.impl.HttpStatusException.<init>:(I)V
            putstatic io.vertx.ext.web.handler.impl.AuthHandlerImpl.BAD_REQUEST:Lio/vertx/ext/web/handler/impl/HttpStatusException;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(io.vertx.ext.auth.AuthProvider);
    descriptor: (Lio/vertx/ext/auth/AuthProvider;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.auth.AuthProvider authProvider
         0: .line 52
            aload 0 /* this */
            aload 1 /* authProvider */
            ldc ""
            invokespecial io.vertx.ext.web.handler.impl.AuthHandlerImpl.<init>:(Lio/vertx/ext/auth/AuthProvider;Ljava/lang/String;)V
         1: .line 53
            return
        end local 1 // io.vertx.ext.auth.AuthProvider authProvider
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    2     1  authProvider  Lio/vertx/ext/auth/AuthProvider;
    MethodParameters:
              Name  Flags
      authProvider  

  public void <init>(io.vertx.ext.auth.AuthProvider, java.lang.String);
    descriptor: (Lio/vertx/ext/auth/AuthProvider;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.auth.AuthProvider authProvider
        start local 2 // java.lang.String realm
         0: .line 55
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 49
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorities:Ljava/util/Set;
         2: .line 56
            aload 0 /* this */
            aload 1 /* authProvider */
            putfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authProvider:Lio/vertx/ext/auth/AuthProvider;
         3: .line 57
            aload 0 /* this */
            aload 2 /* realm */
            putfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.realm:Ljava/lang/String;
         4: .line 58
            return
        end local 2 // java.lang.String realm
        end local 1 // io.vertx.ext.auth.AuthProvider authProvider
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0          this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    5     1  authProvider  Lio/vertx/ext/auth/AuthProvider;
            0    5     2         realm  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      authProvider  
      realm         

  public io.vertx.ext.web.handler.AuthHandler addAuthority(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/ext/web/handler/AuthHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // java.lang.String authority
         0: .line 62
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorities:Ljava/util/Set;
            aload 1 /* authority */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         1: .line 63
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String authority
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    2     1  authority  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      authority  

  public io.vertx.ext.web.handler.AuthHandler addAuthorities(java.util.Set<java.lang.String>);
    descriptor: (Ljava/util/Set;)Lio/vertx/ext/web/handler/AuthHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // java.util.Set authorities
         0: .line 68
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorities:Ljava/util/Set;
            aload 1 /* authorities */
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
         1: .line 69
            aload 0 /* this */
            areturn
        end local 1 // java.util.Set authorities
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    2     1  authorities  Ljava/util/Set<Ljava/lang/String;>;
    Signature: (Ljava/util/Set<Ljava/lang/String;>;)Lio/vertx/ext/web/handler/AuthHandler;
    MethodParameters:
             Name  Flags
      authorities  

  public void authorize(io.vertx.ext.auth.User, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>>);
    descriptor: (Lio/vertx/ext/auth/User;Lio/vertx/core/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.auth.User user
        start local 2 // io.vertx.core.Handler handler
         0: .line 74
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorities:Ljava/util/Set;
            invokeinterface java.util.Set.size:()I
            istore 3 /* requiredcount */
        start local 3 // int requiredcount
         1: .line 75
            iload 3 /* requiredcount */
            ifle 14
         2: .line 76
            aload 1 /* user */
            ifnonnull 5
         3: .line 77
            aload 2 /* handler */
            getstatic io.vertx.ext.web.handler.impl.AuthHandlerImpl.FORBIDDEN:Lio/vertx/ext/web/handler/impl/HttpStatusException;
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/Throwable;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         4: .line 78
            return
         5: .line 81
      StackMap locals: int
      StackMap stack:
            new java.util.concurrent.atomic.AtomicInteger
            dup
            invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:()V
            astore 4 /* count */
        start local 4 // java.util.concurrent.atomic.AtomicInteger count
         6: .line 82
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:()V
            astore 5 /* sentFailure */
        start local 5 // java.util.concurrent.atomic.AtomicBoolean sentFailure
         7: .line 84
            aload 4 /* count */
            iload 3 /* requiredcount */
            aload 2 /* handler */
            aload 5 /* sentFailure */
            invokedynamic handle(Ljava/util/concurrent/atomic/AtomicInteger;ILio/vertx/core/Handler;Ljava/util/concurrent/atomic/AtomicBoolean;)Lio/vertx/core/Handler;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  io/vertx/ext/web/handler/impl/AuthHandlerImpl.lambda$0(Ljava/util/concurrent/atomic/AtomicInteger;ILio/vertx/core/Handler;Ljava/util/concurrent/atomic/AtomicBoolean;Lio/vertx/core/AsyncResult;)V (6)
                  (Lio/vertx/core/AsyncResult;)V
            astore 6 /* authHandler */
        start local 6 // io.vertx.core.Handler authHandler
         8: .line 100
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorities:Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 8
            goto 12
      StackMap locals: io.vertx.ext.web.handler.impl.AuthHandlerImpl io.vertx.ext.auth.User io.vertx.core.Handler int java.util.concurrent.atomic.AtomicInteger java.util.concurrent.atomic.AtomicBoolean io.vertx.core.Handler top java.util.Iterator
      StackMap stack:
         9: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 7 /* authority */
        start local 7 // java.lang.String authority
        10: .line 101
            aload 5 /* sentFailure */
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
            ifne 12
        11: .line 102
            aload 1 /* user */
            aload 7 /* authority */
            aload 6 /* authHandler */
            invokeinterface io.vertx.ext.auth.User.isAuthorized:(Ljava/lang/String;Lio/vertx/core/Handler;)Lio/vertx/ext/auth/User;
            pop
        end local 7 // java.lang.String authority
        12: .line 100
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        end local 6 // io.vertx.core.Handler authHandler
        end local 5 // java.util.concurrent.atomic.AtomicBoolean sentFailure
        end local 4 // java.util.concurrent.atomic.AtomicInteger count
        13: .line 105
            goto 15
        14: .line 107
      StackMap locals: io.vertx.ext.web.handler.impl.AuthHandlerImpl io.vertx.ext.auth.User io.vertx.core.Handler int
      StackMap stack:
            aload 2 /* handler */
            invokestatic io.vertx.core.Future.succeededFuture:()Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
        15: .line 109
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int requiredcount
        end local 2 // io.vertx.core.Handler handler
        end local 1 // io.vertx.ext.auth.User user
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   16     0           this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0   16     1           user  Lio/vertx/ext/auth/User;
            0   16     2        handler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/Void;>;>;
            1   16     3  requiredcount  I
            6   13     4          count  Ljava/util/concurrent/atomic/AtomicInteger;
            7   13     5    sentFailure  Ljava/util/concurrent/atomic/AtomicBoolean;
            8   13     6    authHandler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/Boolean;>;>;
           10   12     7      authority  Ljava/lang/String;
    Signature: (Lio/vertx/ext/auth/User;Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/Void;>;>;)V
    MethodParameters:
         Name  Flags
      user     
      handler  

  protected java.lang.String authenticateHeader(io.vertx.ext.web.RoutingContext);
    descriptor: (Lio/vertx/ext/web/RoutingContext;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext context
         0: .line 112
            aconst_null
            areturn
        end local 1 // io.vertx.ext.web.RoutingContext context
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    1     1  context  Lio/vertx/ext/web/RoutingContext;
    MethodParameters:
         Name  Flags
      context  

  public void handle(io.vertx.ext.web.RoutingContext);
    descriptor: (Lio/vertx/ext/web/RoutingContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext ctx
         0: .line 118
            aload 0 /* this */
            aload 1 /* ctx */
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.handlePreflight:(Lio/vertx/ext/web/RoutingContext;)Z
            ifeq 2
         1: .line 119
            return
         2: .line 122
      StackMap locals:
      StackMap stack:
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.user:()Lio/vertx/ext/auth/User;
            astore 2 /* user */
        start local 2 // io.vertx.ext.auth.User user
         3: .line 123
            aload 2 /* user */
            ifnull 6
         4: .line 125
            aload 0 /* this */
            aload 1 /* ctx */
            aload 2 /* user */
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorizeUser:(Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/auth/User;)V
         5: .line 126
            return
         6: .line 129
      StackMap locals: io.vertx.ext.auth.User
      StackMap stack:
            aload 0 /* this */
            aload 1 /* ctx */
            aload 0 /* this */
            aload 1 /* ctx */
            invokedynamic handle(Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;Lio/vertx/ext/web/RoutingContext;)Lio/vertx/core/Handler;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  io/vertx/ext/web/handler/impl/AuthHandlerImpl.lambda$1(Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V (7)
                  (Lio/vertx/core/AsyncResult;)V
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.parseCredentials:(Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/Handler;)V
         7: .line 173
            return
        end local 2 // io.vertx.ext.auth.User user
        end local 1 // io.vertx.ext.web.RoutingContext ctx
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    8     1   ctx  Lio/vertx/ext/web/RoutingContext;
            3    8     2  user  Lio/vertx/ext/auth/User;
    MethodParameters:
      Name  Flags
      ctx   

  protected void processException(io.vertx.ext.web.RoutingContext, java.lang.Throwable);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Ljava/lang/Throwable;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext ctx
        start local 2 // java.lang.Throwable exception
         0: .line 181
            aload 2 /* exception */
            ifnull 18
         1: .line 182
            aload 2 /* exception */
            instanceof io.vertx.ext.web.handler.impl.HttpStatusException
            ifeq 18
         2: .line 183
            aload 2 /* exception */
            checkcast io.vertx.ext.web.handler.impl.HttpStatusException
            invokevirtual io.vertx.ext.web.handler.impl.HttpStatusException.getStatusCode:()I
            istore 3 /* statusCode */
        start local 3 // int statusCode
         3: .line 184
            aload 2 /* exception */
            checkcast io.vertx.ext.web.handler.impl.HttpStatusException
            invokevirtual io.vertx.ext.web.handler.impl.HttpStatusException.getPayload:()Ljava/lang/String;
            astore 4 /* payload */
        start local 4 // java.lang.String payload
         4: .line 186
            iload 3 /* statusCode */
            lookupswitch { // 2
                  302: 5
                  401: 10
              default: 16
          }
         5: .line 188
      StackMap locals: int java.lang.String
      StackMap stack:
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.response:()Lio/vertx/core/http/HttpServerResponse;
         6: .line 189
            getstatic io.vertx.core.http.HttpHeaders.LOCATION:Ljava/lang/CharSequence;
            aload 4 /* payload */
            invokeinterface io.vertx.core.http.HttpServerResponse.putHeader:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Lio/vertx/core/http/HttpServerResponse;
         7: .line 190
            sipush 302
            invokeinterface io.vertx.core.http.HttpServerResponse.setStatusCode:(I)Lio/vertx/core/http/HttpServerResponse;
         8: .line 191
            new java.lang.StringBuilder
            dup
            ldc "Redirecting to "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* payload */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface io.vertx.core.http.HttpServerResponse.end:(Ljava/lang/String;)V
         9: .line 192
            return
        10: .line 194
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* ctx */
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authenticateHeader:(Lio/vertx/ext/web/RoutingContext;)Ljava/lang/String;
            astore 5 /* header */
        start local 5 // java.lang.String header
        11: .line 195
            aload 5 /* header */
            ifnull 14
        12: .line 196
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.response:()Lio/vertx/core/http/HttpServerResponse;
        13: .line 197
            ldc "WWW-Authenticate"
            aload 5 /* header */
            invokeinterface io.vertx.core.http.HttpServerResponse.putHeader:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/http/HttpServerResponse;
            pop
        14: .line 199
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* ctx */
            sipush 401
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(I)V
        15: .line 200
            return
        end local 5 // java.lang.String header
        16: .line 202
      StackMap locals:
      StackMap stack:
            aload 1 /* ctx */
            iload 3 /* statusCode */
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(I)V
        17: .line 203
            return
        end local 4 // java.lang.String payload
        end local 3 // int statusCode
        18: .line 209
      StackMap locals:
      StackMap stack:
            aload 1 /* ctx */
            aload 2 /* exception */
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(Ljava/lang/Throwable;)V
        19: .line 210
            return
        end local 2 // java.lang.Throwable exception
        end local 1 // io.vertx.ext.web.RoutingContext ctx
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   20     0        this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0   20     1         ctx  Lio/vertx/ext/web/RoutingContext;
            0   20     2   exception  Ljava/lang/Throwable;
            3   18     3  statusCode  I
            4   18     4     payload  Ljava/lang/String;
           11   16     5      header  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      ctx        
      exception  

  private void authorizeUser(io.vertx.ext.web.RoutingContext, io.vertx.ext.auth.User);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/auth/User;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext ctx
        start local 2 // io.vertx.ext.auth.User user
         0: .line 213
            aload 0 /* this */
            aload 2 /* user */
            aload 0 /* this */
            aload 1 /* ctx */
            invokedynamic handle(Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;Lio/vertx/ext/web/RoutingContext;)Lio/vertx/core/Handler;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  io/vertx/ext/web/handler/impl/AuthHandlerImpl.lambda$3(Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V (7)
                  (Lio/vertx/core/AsyncResult;)V
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorize:(Lio/vertx/ext/auth/User;Lio/vertx/core/Handler;)V
         1: .line 221
            return
        end local 2 // io.vertx.ext.auth.User user
        end local 1 // io.vertx.ext.web.RoutingContext ctx
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    2     1   ctx  Lio/vertx/ext/web/RoutingContext;
            0    2     2  user  Lio/vertx/ext/auth/User;
    MethodParameters:
      Name  Flags
      ctx   
      user  

  private boolean handlePreflight(io.vertx.ext.web.RoutingContext);
    descriptor: (Lio/vertx/ext/web/RoutingContext;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=8, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext ctx
         0: .line 224
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.request:()Lio/vertx/core/http/HttpServerRequest;
            astore 2 /* request */
        start local 2 // io.vertx.core.http.HttpServerRequest request
         1: .line 227
            aload 2 /* request */
            invokeinterface io.vertx.core.http.HttpServerRequest.method:()Lio/vertx/core/http/HttpMethod;
            getstatic io.vertx.core.http.HttpMethod.OPTIONS:Lio/vertx/core/http/HttpMethod;
            if_acmpne 11
         2: .line 229
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.request:()Lio/vertx/core/http/HttpServerRequest;
            getstatic io.vertx.core.http.HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS:Ljava/lang/CharSequence;
            invokeinterface io.vertx.core.http.HttpServerRequest.getHeader:(Ljava/lang/CharSequence;)Ljava/lang/String;
            astore 3 /* accessControlRequestHeader */
        start local 3 // java.lang.String accessControlRequestHeader
         3: .line 230
            aload 3 /* accessControlRequestHeader */
            ifnull 11
         4: .line 232
            aload 3 /* accessControlRequestHeader */
            ldc ","
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 10
      StackMap locals: io.vertx.ext.web.handler.impl.AuthHandlerImpl io.vertx.ext.web.RoutingContext io.vertx.core.http.HttpServerRequest java.lang.String top int int java.lang.String[]
      StackMap stack:
         5: aload 7
            iload 5
            aaload
            astore 4 /* ctrlReq */
        start local 4 // java.lang.String ctrlReq
         6: .line 233
            aload 4 /* ctrlReq */
            ldc "Authorization"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 9
         7: .line 235
            aload 1 /* ctx */
            invokeinterface io.vertx.ext.web.RoutingContext.next:()V
         8: .line 236
            iconst_1
            ireturn
        end local 4 // java.lang.String ctrlReq
         9: .line 232
      StackMap locals:
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        10: iload 5
            iload 6
            if_icmplt 5
        end local 3 // java.lang.String accessControlRequestHeader
        11: .line 242
      StackMap locals: io.vertx.ext.web.handler.impl.AuthHandlerImpl io.vertx.ext.web.RoutingContext io.vertx.core.http.HttpServerRequest
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // io.vertx.core.http.HttpServerRequest request
        end local 1 // io.vertx.ext.web.RoutingContext ctx
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot                        Name  Signature
            0   12     0                        this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0   12     1                         ctx  Lio/vertx/ext/web/RoutingContext;
            1   12     2                     request  Lio/vertx/core/http/HttpServerRequest;
            3   11     3  accessControlRequestHeader  Ljava/lang/String;
            6    9     4                     ctrlReq  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      ctx   

  private io.vertx.ext.auth.AuthProvider getAuthProvider(io.vertx.ext.web.RoutingContext);
    descriptor: (Lio/vertx/ext/web/RoutingContext;)Lio/vertx/ext/auth/AuthProvider;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext ctx
         0: .line 247
            aload 1 /* ctx */
            ldc "io.vertx.ext.web.handler.AuthHandler.provider"
            invokeinterface io.vertx.ext.web.RoutingContext.get:(Ljava/lang/String;)Ljava/lang/Object;
            checkcast io.vertx.ext.auth.AuthProvider
            astore 2 /* provider */
        start local 2 // io.vertx.ext.auth.AuthProvider provider
         1: .line 248
            aload 2 /* provider */
            ifnull 5
         2: .line 250
            aload 2 /* provider */
         3: areturn
        end local 2 // io.vertx.ext.auth.AuthProvider provider
         4: .line 252
      StackMap locals:
      StackMap stack: java.lang.RuntimeException
            pop
         5: .line 256
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.AuthHandlerImpl.authProvider:Lio/vertx/ext/auth/AuthProvider;
            areturn
        end local 1 // io.vertx.ext.web.RoutingContext ctx
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    6     1       ctx  Lio/vertx/ext/web/RoutingContext;
            1    4     2  provider  Lio/vertx/ext/auth/AuthProvider;
      Exception table:
        from    to  target  type
           0     3       4  Class java.lang.RuntimeException
    MethodParameters:
      Name  Flags
      ctx   

  public void handle(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            checkcast io.vertx.ext.web.RoutingContext
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.handle:(Lio/vertx/ext/web/RoutingContext;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static void lambda$0(java.util.concurrent.atomic.AtomicInteger, int, io.vertx.core.Handler, java.util.concurrent.atomic.AtomicBoolean, io.vertx.core.AsyncResult);
    descriptor: (Ljava/util/concurrent/atomic/AtomicInteger;ILio/vertx/core/Handler;Ljava/util/concurrent/atomic/AtomicBoolean;Lio/vertx/core/AsyncResult;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=5, args_size=5
        start local 4 // io.vertx.core.AsyncResult res
         0: .line 85
            aload 4 /* res */
            invokeinterface io.vertx.core.AsyncResult.succeeded:()Z
            ifeq 8
         1: .line 86
            aload 4 /* res */
            invokeinterface io.vertx.core.AsyncResult.result:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 5
         2: .line 87
            aload 0
            invokevirtual java.util.concurrent.atomic.AtomicInteger.incrementAndGet:()I
            iload 1
            if_icmpne 9
         3: .line 89
            aload 2
            invokestatic io.vertx.core.Future.succeededFuture:()Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         4: .line 91
            goto 9
         5: .line 92
      StackMap locals:
      StackMap stack:
            aload 3
            iconst_0
            iconst_1
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
            ifeq 9
         6: .line 93
            aload 2
            getstatic io.vertx.ext.web.handler.impl.AuthHandlerImpl.FORBIDDEN:Lio/vertx/ext/web/handler/impl/HttpStatusException;
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/Throwable;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         7: .line 96
            goto 9
         8: .line 97
      StackMap locals:
      StackMap stack:
            aload 2
            aload 4 /* res */
            invokeinterface io.vertx.core.AsyncResult.cause:()Ljava/lang/Throwable;
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/Throwable;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         9: .line 99
      StackMap locals:
      StackMap stack:
            return
        end local 4 // io.vertx.core.AsyncResult res
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     4   res  Lio/vertx/core/AsyncResult<Ljava/lang/Boolean;>;

  private void lambda$1(io.vertx.ext.web.RoutingContext, io.vertx.core.AsyncResult);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 2 // io.vertx.core.AsyncResult res
         0: .line 130
            aload 2 /* res */
            invokeinterface io.vertx.core.AsyncResult.failed:()Z
            ifeq 3
         1: .line 131
            aload 0 /* this */
            aload 1
            aload 2 /* res */
            invokeinterface io.vertx.core.AsyncResult.cause:()Ljava/lang/Throwable;
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.processException:(Lio/vertx/ext/web/RoutingContext;Ljava/lang/Throwable;)V
         2: .line 132
            return
         3: .line 135
      StackMap locals:
      StackMap stack:
            aload 1
            invokeinterface io.vertx.ext.web.RoutingContext.user:()Lio/vertx/ext/auth/User;
            astore 3 /* updatedUser */
        start local 3 // io.vertx.ext.auth.User updatedUser
         4: .line 137
            aload 3 /* updatedUser */
            ifnull 10
         5: .line 138
            aload 1
            invokeinterface io.vertx.ext.web.RoutingContext.session:()Lio/vertx/ext/web/Session;
            astore 4 /* session */
        start local 4 // io.vertx.ext.web.Session session
         6: .line 139
            aload 4 /* session */
            ifnull 8
         7: .line 142
            aload 4 /* session */
            invokeinterface io.vertx.ext.web.Session.regenerateId:()Lio/vertx/ext/web/Session;
            pop
         8: .line 145
      StackMap locals: io.vertx.ext.auth.User io.vertx.ext.web.Session
      StackMap stack:
            aload 0 /* this */
            aload 1
            aload 3 /* updatedUser */
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorizeUser:(Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/auth/User;)V
         9: .line 146
            return
        end local 4 // io.vertx.ext.web.Session session
        10: .line 150
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.getAuthProvider:(Lio/vertx/ext/web/RoutingContext;)Lio/vertx/ext/auth/AuthProvider;
            aload 2 /* res */
            invokeinterface io.vertx.core.AsyncResult.result:()Ljava/lang/Object;
            checkcast io.vertx.core.json.JsonObject
            aload 0 /* this */
            aload 1
            invokedynamic handle(Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;Lio/vertx/ext/web/RoutingContext;)Lio/vertx/core/Handler;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  io/vertx/ext/web/handler/impl/AuthHandlerImpl.lambda$2(Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V (7)
                  (Lio/vertx/core/AsyncResult;)V
            invokeinterface io.vertx.ext.auth.AuthProvider.authenticate:(Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler;)V
        end local 3 // io.vertx.ext.auth.User updatedUser
        11: .line 172
            return
        end local 2 // io.vertx.core.AsyncResult res
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   12     0         this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0   12     2          res  Lio/vertx/core/AsyncResult<Lio/vertx/core/json/JsonObject;>;
            4   11     3  updatedUser  Lio/vertx/ext/auth/User;
            6   10     4      session  Lio/vertx/ext/web/Session;

  private void lambda$3(io.vertx.ext.web.RoutingContext, io.vertx.core.AsyncResult);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 2 // io.vertx.core.AsyncResult authZ
         0: .line 214
            aload 2 /* authZ */
            invokeinterface io.vertx.core.AsyncResult.failed:()Z
            ifeq 3
         1: .line 215
            aload 0 /* this */
            aload 1
            aload 2 /* authZ */
            invokeinterface io.vertx.core.AsyncResult.cause:()Ljava/lang/Throwable;
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.processException:(Lio/vertx/ext/web/RoutingContext;Ljava/lang/Throwable;)V
         2: .line 216
            return
         3: .line 219
      StackMap locals:
      StackMap stack:
            aload 1
            invokeinterface io.vertx.ext.web.RoutingContext.next:()V
         4: .line 220
            return
        end local 2 // io.vertx.core.AsyncResult authZ
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0    5     2  authZ  Lio/vertx/core/AsyncResult<Ljava/lang/Void;>;

  private void lambda$2(io.vertx.ext.web.RoutingContext, io.vertx.core.AsyncResult);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Lio/vertx/core/AsyncResult;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
        start local 2 // io.vertx.core.AsyncResult authN
         0: .line 151
            aload 2 /* authN */
            invokeinterface io.vertx.core.AsyncResult.succeeded:()Z
            ifeq 8
         1: .line 152
            aload 2 /* authN */
            invokeinterface io.vertx.core.AsyncResult.result:()Ljava/lang/Object;
            checkcast io.vertx.ext.auth.User
            astore 3 /* authenticated */
        start local 3 // io.vertx.ext.auth.User authenticated
         2: .line 153
            aload 1
            aload 3 /* authenticated */
            invokeinterface io.vertx.ext.web.RoutingContext.setUser:(Lio/vertx/ext/auth/User;)V
         3: .line 154
            aload 1
            invokeinterface io.vertx.ext.web.RoutingContext.session:()Lio/vertx/ext/web/Session;
            astore 4 /* session */
        start local 4 // io.vertx.ext.web.Session session
         4: .line 155
            aload 4 /* session */
            ifnull 6
         5: .line 158
            aload 4 /* session */
            invokeinterface io.vertx.ext.web.Session.regenerateId:()Lio/vertx/ext/web/Session;
            pop
         6: .line 161
      StackMap locals: io.vertx.ext.auth.User io.vertx.ext.web.Session
      StackMap stack:
            aload 0 /* this */
            aload 1
            aload 3 /* authenticated */
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorizeUser:(Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/auth/User;)V
        end local 4 // io.vertx.ext.web.Session session
        end local 3 // io.vertx.ext.auth.User authenticated
         7: .line 162
            goto 13
         8: .line 163
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.authenticateHeader:(Lio/vertx/ext/web/RoutingContext;)Ljava/lang/String;
            astore 3 /* header */
        start local 3 // java.lang.String header
         9: .line 164
            aload 3 /* header */
            ifnull 12
        10: .line 165
            aload 1
            invokeinterface io.vertx.ext.web.RoutingContext.response:()Lio/vertx/core/http/HttpServerResponse;
        11: .line 166
            ldc "WWW-Authenticate"
            aload 3 /* header */
            invokeinterface io.vertx.core.http.HttpServerResponse.putHeader:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/http/HttpServerResponse;
            pop
        12: .line 169
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 1
            new io.vertx.ext.web.handler.impl.HttpStatusException
            dup
            sipush 401
            aload 2 /* authN */
            invokeinterface io.vertx.core.AsyncResult.cause:()Ljava/lang/Throwable;
            invokespecial io.vertx.ext.web.handler.impl.HttpStatusException.<init>:(ILjava/lang/Throwable;)V
            invokevirtual io.vertx.ext.web.handler.impl.AuthHandlerImpl.processException:(Lio/vertx/ext/web/RoutingContext;Ljava/lang/Throwable;)V
        end local 3 // java.lang.String header
        13: .line 171
      StackMap locals:
      StackMap stack:
            return
        end local 2 // io.vertx.core.AsyncResult authN
        end local 0 // io.vertx.ext.web.handler.impl.AuthHandlerImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   14     0           this  Lio/vertx/ext/web/handler/impl/AuthHandlerImpl;
            0   14     2          authN  Lio/vertx/core/AsyncResult<Lio/vertx/ext/auth/User;>;
            2    7     3  authenticated  Lio/vertx/ext/auth/User;
            4    7     4        session  Lio/vertx/ext/web/Session;
            9   13     3         header  Ljava/lang/String;
}
SourceFile: "AuthHandlerImpl.java"
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles