public class org.apache.catalina.realm.JAASRealm extends org.apache.catalina.realm.RealmBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.realm.JAASRealm
  super_class: org.apache.catalina.realm.RealmBase
{
  private static final org.apache.juli.logging.Log log;
    descriptor: Lorg/apache/juli/logging/Log;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  protected java.lang.String appName;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

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

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

  protected boolean useContextClassLoader;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String configFile;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected volatile javax.security.auth.login.Configuration jaasConfiguration;
    descriptor: Ljavax/security/auth/login/Configuration;
    flags: (0x0044) ACC_PROTECTED, ACC_VOLATILE

  protected volatile boolean jaasConfigurationLoaded;
    descriptor: Z
    flags: (0x0044) ACC_PROTECTED, ACC_VOLATILE

  private volatile boolean invocationSuccess;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  protected java.lang.String roleClassNames;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userClassNames;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 130
            ldc Lorg/apache/catalina/realm/JAASRealm;
            invokestatic org.apache.juli.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/juli/logging/Log;
            putstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 128
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.<init>:()V
         1: .line 139
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
         2: .line 145
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.apache.catalina.realm.JAASRealm.roleClasses:Ljava/util/List;
         3: .line 151
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.apache.catalina.realm.JAASRealm.userClasses:Ljava/util/List;
         4: .line 159
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.useContextClassLoader:Z
         5: .line 169
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JAASRealm.jaasConfigurationLoaded:Z
         6: .line 178
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
         7: .line 247
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JAASRealm.roleClassNames:Ljava/lang/String;
         8: .line 302
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JAASRealm.userClassNames:Ljava/lang/String;
         9: .line 128
            return
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public java.lang.String getConfigFile();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 186
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.configFile:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public void setConfigFile(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String configFile
         0: .line 194
            aload 0 /* this */
            aload 1 /* configFile */
            putfield org.apache.catalina.realm.JAASRealm.configFile:Ljava/lang/String;
         1: .line 195
            return
        end local 1 // java.lang.String configFile
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/realm/JAASRealm;
            0    2     1  configFile  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      configFile  

  public void setAppName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String name
         0: .line 203
            aload 0 /* this */
            aload 1 /* name */
            putfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
         1: .line 204
            return
        end local 1 // java.lang.String name
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/realm/JAASRealm;
            0    2     1  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  

  public java.lang.String getAppName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 210
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public void setUseContextClassLoader(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // boolean useContext
         0: .line 220
            aload 0 /* this */
            iload 1 /* useContext */
            putfield org.apache.catalina.realm.JAASRealm.useContextClassLoader:Z
         1: .line 221
            return
        end local 1 // boolean useContext
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/realm/JAASRealm;
            0    2     1  useContext  Z
    MethodParameters:
            Name  Flags
      useContext  

  public boolean isUseContextClassLoader();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 230
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.useContextClassLoader:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public void setContainer(org.apache.catalina.Container);
    descriptor: (Lorg/apache/catalina/Container;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // org.apache.catalina.Container container
         0: .line 235
            aload 0 /* this */
            aload 1 /* container */
            invokespecial org.apache.catalina.realm.RealmBase.setContainer:(Lorg/apache/catalina/Container;)V
         1: .line 237
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            ifnonnull 4
         2: .line 238
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* container */
            invokeinterface org.apache.catalina.Container.getName:()Ljava/lang/String;
            invokevirtual org.apache.catalina.realm.JAASRealm.makeLegalForJAAS:(Ljava/lang/String;)Ljava/lang/String;
            putfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
         3: .line 239
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.appName"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;)V
         4: .line 241
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.apache.catalina.Container container
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lorg/apache/catalina/realm/JAASRealm;
            0    5     1  container  Lorg/apache/catalina/Container;
    MethodParameters:
           Name  Flags
      container  

  public java.lang.String getRoleClassNames();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 250
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.roleClassNames:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public void setRoleClassNames(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String roleClassNames
         0: .line 261
            aload 0 /* this */
            aload 1 /* roleClassNames */
            putfield org.apache.catalina.realm.JAASRealm.roleClassNames:Ljava/lang/String;
         1: .line 262
            return
        end local 1 // java.lang.String roleClassNames
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/JAASRealm;
            0    2     1  roleClassNames  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      roleClassNames  

  protected void parseClassNames(java.lang.String, java.util.List<java.lang.String>);
    descriptor: (Ljava/lang/String;Ljava/util/List;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=10, args_size=3
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String classNamesString
        start local 2 // java.util.List classNamesList
         0: .line 274
            aload 2 /* classNamesList */
            invokeinterface java.util.List.clear:()V
         1: .line 275
            aload 1 /* classNamesString */
            ifnonnull 2
            return
         2: .line 277
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            astore 3 /* loader */
        start local 3 // java.lang.ClassLoader loader
         3: .line 278
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.isUseContextClassLoader:()Z
            ifeq 5
         4: .line 279
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 3 /* loader */
         5: .line 281
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            aload 1 /* classNamesString */
            ldc "[ ]*,[ ]*"
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 4 /* classNames */
        start local 4 // java.lang.String[] classNames
         6: .line 282
            aload 4 /* classNames */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 20
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String java.util.List java.lang.ClassLoader java.lang.String[] top int int java.lang.String[]
      StackMap stack:
         7: aload 8
            iload 6
            aaload
            astore 5 /* className */
        start local 5 // java.lang.String className
         8: .line 283
            aload 5 /* className */
            invokevirtual java.lang.String.length:()I
            ifne 9
            goto 19
         9: .line 285
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String java.util.List java.lang.ClassLoader java.lang.String[] java.lang.String int int java.lang.String[]
      StackMap stack:
            aload 5 /* className */
            iconst_0
        10: .line 286
            aload 3 /* loader */
        11: .line 285
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            astore 9 /* principalClass */
        start local 9 // java.lang.Class principalClass
        12: .line 287
            ldc Ljava/security/Principal;
            aload 9 /* principalClass */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 15
        13: .line 288
            aload 2 /* classNamesList */
            aload 5 /* className */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        14: .line 289
            goto 19
        15: .line 290
      StackMap locals: java.lang.Class
      StackMap stack:
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.notPrincipal"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* className */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;)V
        end local 9 // java.lang.Class principalClass
        16: .line 292
            goto 19
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String java.util.List java.lang.ClassLoader java.lang.String[] java.lang.String int int java.lang.String[]
      StackMap stack: java.lang.ClassNotFoundException
        17: pop
        18: .line 293
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.classNotFound"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* className */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;)V
        end local 5 // java.lang.String className
        19: .line 282
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String java.util.List java.lang.ClassLoader java.lang.String[] top int int java.lang.String[]
      StackMap stack:
            iinc 6 1
      StackMap locals:
      StackMap stack:
        20: iload 6
            iload 7
            if_icmplt 7
        21: .line 296
            return
        end local 4 // java.lang.String[] classNames
        end local 3 // java.lang.ClassLoader loader
        end local 2 // java.util.List classNamesList
        end local 1 // java.lang.String classNamesString
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   22     0              this  Lorg/apache/catalina/realm/JAASRealm;
            0   22     1  classNamesString  Ljava/lang/String;
            0   22     2    classNamesList  Ljava/util/List<Ljava/lang/String;>;
            3   22     3            loader  Ljava/lang/ClassLoader;
            6   22     4        classNames  [Ljava/lang/String;
            8   19     5         className  Ljava/lang/String;
           12   16     9    principalClass  Ljava/lang/Class<*>;
      Exception table:
        from    to  target  type
           9    16      17  Class java.lang.ClassNotFoundException
    Signature: (Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;)V
    MethodParameters:
                  Name  Flags
      classNamesString  
      classNamesList    

  public java.lang.String getUserClassNames();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 305
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.userClassNames:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;

  public void setUserClassNames(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String userClassNames
         0: .line 316
            aload 0 /* this */
            aload 1 /* userClassNames */
            putfield org.apache.catalina.realm.JAASRealm.userClassNames:Ljava/lang/String;
         1: .line 317
            return
        end local 1 // java.lang.String userClassNames
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/JAASRealm;
            0    2     1  userClassNames  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      userClassNames  

  public java.security.Principal authenticate(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=3, args_size=3
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String credentials
         0: .line 333
            aload 0 /* this */
            aload 1 /* username */
         1: .line 334
            new org.apache.catalina.realm.JAASCallbackHandler
            dup
            aload 0 /* this */
            aload 1 /* username */
            aload 2 /* credentials */
            invokespecial org.apache.catalina.realm.JAASCallbackHandler.<init>:(Lorg/apache/catalina/realm/JAASRealm;Ljava/lang/String;Ljava/lang/String;)V
         2: .line 333
            invokevirtual org.apache.catalina.realm.JAASRealm.authenticate:(Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)Ljava/security/Principal;
            areturn
        end local 2 // java.lang.String credentials
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0         this  Lorg/apache/catalina/realm/JAASRealm;
            0    3     1     username  Ljava/lang/String;
            0    3     2  credentials  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      username     
      credentials  

  public java.security.Principal authenticate(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=14, locals=9, args_size=9
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String clientDigest
        start local 3 // java.lang.String nonce
        start local 4 // java.lang.String nc
        start local 5 // java.lang.String cnonce
        start local 6 // java.lang.String qop
        start local 7 // java.lang.String realmName
        start local 8 // java.lang.String md5a2
         0: .line 357
            aload 0 /* this */
            aload 1 /* username */
         1: .line 358
            new org.apache.catalina.realm.JAASCallbackHandler
            dup
            aload 0 /* this */
            aload 1 /* username */
            aload 2 /* clientDigest */
            aload 3 /* nonce */
         2: .line 359
            aload 4 /* nc */
            aload 5 /* cnonce */
            aload 6 /* qop */
            aload 7 /* realmName */
            aload 8 /* md5a2 */
         3: .line 360
            ldc "DIGEST"
         4: .line 358
            invokespecial org.apache.catalina.realm.JAASCallbackHandler.<init>:(Lorg/apache/catalina/realm/JAASRealm;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
         5: .line 357
            invokevirtual org.apache.catalina.realm.JAASRealm.authenticate:(Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)Ljava/security/Principal;
            areturn
        end local 8 // java.lang.String md5a2
        end local 7 // java.lang.String realmName
        end local 6 // java.lang.String qop
        end local 5 // java.lang.String cnonce
        end local 4 // java.lang.String nc
        end local 3 // java.lang.String nonce
        end local 2 // java.lang.String clientDigest
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Lorg/apache/catalina/realm/JAASRealm;
            0    6     1      username  Ljava/lang/String;
            0    6     2  clientDigest  Ljava/lang/String;
            0    6     3         nonce  Ljava/lang/String;
            0    6     4            nc  Ljava/lang/String;
            0    6     5        cnonce  Ljava/lang/String;
            0    6     6           qop  Ljava/lang/String;
            0    6     7     realmName  Ljava/lang/String;
            0    6     8         md5a2  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      username      
      clientDigest  
      nonce         
      nc            
      cnonce        
      qop           
      realmName     
      md5a2         

  protected java.security.Principal authenticate(java.lang.String, javax.security.auth.callback.CallbackHandler);
    descriptor: (Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=7, args_size=3
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
        start local 2 // javax.security.auth.callback.CallbackHandler callbackHandler
         0: .line 381
            aconst_null
            astore 3 /* loginContext */
        start local 3 // javax.security.auth.login.LoginContext loginContext
         1: .line 382
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            ifnonnull 2
            aload 0 /* this */
            ldc "Tomcat"
            putfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
         2: .line 384
      StackMap locals: javax.security.auth.login.LoginContext
      StackMap stack:
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 4
         3: .line 385
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.beginLogin"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         4: .line 388
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 4 /* ocl */
        start local 4 // java.lang.ClassLoader ocl
         5: .line 390
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.isUseContextClassLoader:()Z
            ifne 10
         6: .line 391
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 4 /* ocl */
         7: .line 392
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
         8: .line 393
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
         9: .line 392
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        10: .line 397
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.getConfig:()Ljavax/security/auth/login/Configuration;
            astore 5 /* config */
        start local 5 // javax.security.auth.login.Configuration config
        11: .line 398
            new javax.security.auth.login.LoginContext
            dup
        12: .line 399
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.appName:Ljava/lang/String;
            aconst_null
            aload 2 /* callbackHandler */
            aload 5 /* config */
        13: .line 398
            invokespecial javax.security.auth.login.LoginContext.<init>:(Ljava/lang/String;Ljavax/security/auth/Subject;Ljavax/security/auth/callback/CallbackHandler;Ljavax/security/auth/login/Configuration;)V
            astore 3 /* loginContext */
        end local 5 // javax.security.auth.login.Configuration config
        14: .line 400
            goto 26
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: astore 5 /* e */
        start local 5 // java.lang.Throwable e
        16: .line 401
            aload 5 /* e */
            invokestatic org.apache.tomcat.util.ExceptionUtils.handleThrowable:(Ljava/lang/Throwable;)V
        17: .line 402
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.unexpectedError"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        18: .line 405
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        19: .line 408
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.isUseContextClassLoader:()Z
            ifne 21
        20: .line 409
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 4 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        21: .line 406
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aconst_null
            areturn
        end local 5 // java.lang.Throwable e
        22: .line 407
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.callback.CallbackHandler javax.security.auth.login.LoginContext java.lang.ClassLoader
      StackMap stack: java.lang.Throwable
            astore 6
        23: .line 408
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.isUseContextClassLoader:()Z
            ifne 25
        24: .line 409
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 4 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        25: .line 411
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.callback.CallbackHandler javax.security.auth.login.LoginContext java.lang.ClassLoader top java.lang.Throwable
      StackMap stack:
            aload 6
            athrow
        26: .line 408
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.callback.CallbackHandler javax.security.auth.login.LoginContext java.lang.ClassLoader
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JAASRealm.isUseContextClassLoader:()Z
            ifne 28
        27: .line 409
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 4 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        28: .line 413
      StackMap locals:
      StackMap stack:
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 30
        29: .line 414
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Login context created "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        30: .line 417
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* subject */
        start local 5 // javax.security.auth.Subject subject
        31: .line 419
            aload 3 /* loginContext */
            invokevirtual javax.security.auth.login.LoginContext.login:()V
        32: .line 420
            aload 3 /* loginContext */
            invokevirtual javax.security.auth.login.LoginContext.getSubject:()Ljavax/security/auth/Subject;
            astore 5 /* subject */
        33: .line 425
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        34: .line 426
            aload 5 /* subject */
            ifnonnull 62
        35: .line 427
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 37
        36: .line 428
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.failedLogin"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        37: .line 429
      StackMap locals: javax.security.auth.Subject
      StackMap stack:
            aconst_null
            areturn
        38: .line 431
      StackMap locals:
      StackMap stack: javax.security.auth.login.AccountExpiredException
            pop
        39: .line 432
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 41
        40: .line 433
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.accountExpired"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        41: .line 436
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        42: .line 437
            aconst_null
            areturn
        43: .line 438
      StackMap locals:
      StackMap stack: javax.security.auth.login.CredentialExpiredException
            pop
        44: .line 439
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 46
        45: .line 440
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.credentialExpired"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        46: .line 443
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        47: .line 444
            aconst_null
            areturn
        48: .line 445
      StackMap locals:
      StackMap stack: javax.security.auth.login.FailedLoginException
            pop
        49: .line 446
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 51
        50: .line 447
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.failedLogin"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        51: .line 450
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        52: .line 451
            aconst_null
            areturn
        53: .line 452
      StackMap locals:
      StackMap stack: javax.security.auth.login.LoginException
            astore 6 /* e */
        start local 6 // javax.security.auth.login.LoginException e
        54: .line 453
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.loginException"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 6 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        55: .line 456
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        56: .line 457
            aconst_null
            areturn
        end local 6 // javax.security.auth.login.LoginException e
        57: .line 458
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 6 /* e */
        start local 6 // java.lang.Throwable e
        58: .line 459
            aload 6 /* e */
            invokestatic org.apache.tomcat.util.ExceptionUtils.handleThrowable:(Ljava/lang/Throwable;)V
        59: .line 460
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.unexpectedError"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 6 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        60: .line 463
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        61: .line 464
            aconst_null
            areturn
        end local 6 // java.lang.Throwable e
        62: .line 467
      StackMap locals:
      StackMap stack:
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 64
        63: .line 468
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.loginContextCreated"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        64: .line 471
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* username */
            aload 5 /* subject */
            aload 3 /* loginContext */
            invokevirtual org.apache.catalina.realm.JAASRealm.createPrincipal:(Ljava/lang/String;Ljavax/security/auth/Subject;Ljavax/security/auth/login/LoginContext;)Ljava/security/Principal;
            astore 6 /* principal */
        start local 6 // java.security.Principal principal
        65: .line 472
            aload 6 /* principal */
            ifnonnull 68
        66: .line 473
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.authenticateFailure"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        67: .line 474
            aconst_null
            areturn
        68: .line 476
      StackMap locals: java.security.Principal
      StackMap stack:
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 70
        69: .line 477
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.authenticateSuccess"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* username */
            aastore
            dup
            iconst_1
            aload 6 /* principal */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        70: .line 480
      StackMap locals:
      StackMap stack:
            aload 6 /* principal */
        71: areturn
        end local 6 // java.security.Principal principal
        end local 5 // javax.security.auth.Subject subject
        end local 4 // java.lang.ClassLoader ocl
        end local 3 // javax.security.auth.login.LoginContext loginContext
        72: .line 481
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.callback.CallbackHandler
      StackMap stack: java.lang.Throwable
            astore 3 /* t */
        start local 3 // java.lang.Throwable t
        73: .line 482
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            ldc "error "
            aload 3 /* t */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        74: .line 484
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
        75: .line 485
            aconst_null
            areturn
        end local 3 // java.lang.Throwable t
        end local 2 // javax.security.auth.callback.CallbackHandler callbackHandler
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   76     0             this  Lorg/apache/catalina/realm/JAASRealm;
            0   76     1         username  Ljava/lang/String;
            0   76     2  callbackHandler  Ljavax/security/auth/callback/CallbackHandler;
            1   72     3     loginContext  Ljavax/security/auth/login/LoginContext;
            5   72     4              ocl  Ljava/lang/ClassLoader;
           11   14     5           config  Ljavax/security/auth/login/Configuration;
           16   22     5                e  Ljava/lang/Throwable;
           31   72     5          subject  Ljavax/security/auth/Subject;
           54   57     6                e  Ljavax/security/auth/login/LoginException;
           58   62     6                e  Ljava/lang/Throwable;
           65   72     6        principal  Ljava/security/Principal;
           73   76     3                t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
          10    14      15  Class java.lang.Throwable
          10    19      22  any
          31    37      38  Class javax.security.auth.login.AccountExpiredException
          31    37      43  Class javax.security.auth.login.CredentialExpiredException
          31    37      48  Class javax.security.auth.login.FailedLoginException
          31    37      53  Class javax.security.auth.login.LoginException
          31    37      57  Class java.lang.Throwable
           0    21      72  Class java.lang.Throwable
          22    37      72  Class java.lang.Throwable
          38    42      72  Class java.lang.Throwable
          43    47      72  Class java.lang.Throwable
          48    52      72  Class java.lang.Throwable
          53    56      72  Class java.lang.Throwable
          57    61      72  Class java.lang.Throwable
          62    67      72  Class java.lang.Throwable
          68    71      72  Class java.lang.Throwable
    MethodParameters:
                 Name  Flags
      username         
      callbackHandler  

  protected java.lang.String getPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
         0: .line 497
            aconst_null
            areturn
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/apache/catalina/realm/JAASRealm;
            0    1     1  username  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      username  

  protected java.security.Principal getPrincipal(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=14, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
         0: .line 507
            aload 0 /* this */
            aload 1 /* username */
         1: .line 508
            new org.apache.catalina.realm.JAASCallbackHandler
            dup
            aload 0 /* this */
            aload 1 /* username */
            aconst_null
            aconst_null
            aconst_null
            aconst_null
         2: .line 509
            aconst_null
            aconst_null
            aconst_null
            ldc "CLIENT_CERT"
         3: .line 508
            invokespecial org.apache.catalina.realm.JAASCallbackHandler.<init>:(Lorg/apache/catalina/realm/JAASRealm;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
         4: .line 507
            invokevirtual org.apache.catalina.realm.JAASRealm.authenticate:(Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)Ljava/security/Principal;
            areturn
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lorg/apache/catalina/realm/JAASRealm;
            0    5     1  username  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      username  

  protected java.security.Principal createPrincipal(java.lang.String, javax.security.auth.Subject, javax.security.auth.login.LoginContext);
    descriptor: (Ljava/lang/String;Ljavax/security/auth/Subject;Ljavax/security/auth/login/LoginContext;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=9, args_size=4
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String username
        start local 2 // javax.security.auth.Subject subject
        start local 3 // javax.security.auth.login.LoginContext loginContext
         0: .line 534
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 4 /* roles */
        start local 4 // java.util.List roles
         1: .line 535
            aconst_null
            astore 5 /* userPrincipal */
        start local 5 // java.security.Principal userPrincipal
         2: .line 538
            aload 2 /* subject */
            invokevirtual javax.security.auth.Subject.getPrincipals:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 15
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.Subject javax.security.auth.login.LoginContext java.util.List java.security.Principal top java.util.Iterator
      StackMap stack:
         3: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.security.Principal
            astore 6 /* principal */
        start local 6 // java.security.Principal principal
         4: .line 539
            aload 6 /* principal */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            astore 8 /* principalClass */
        start local 8 // java.lang.String principalClass
         5: .line 541
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 7
         6: .line 542
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.checkPrincipal"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* principal */
            aastore
            dup
            iconst_1
            aload 8 /* principalClass */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         7: .line 545
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.Subject javax.security.auth.login.LoginContext java.util.List java.security.Principal java.security.Principal java.util.Iterator java.lang.String
      StackMap stack:
            aload 5 /* userPrincipal */
            ifnonnull 11
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.userClasses:Ljava/util/List;
            aload 8 /* principalClass */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 11
         8: .line 546
            aload 6 /* principal */
            astore 5 /* userPrincipal */
         9: .line 547
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 11
        10: .line 548
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.userPrincipalSuccess"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* principal */
            invokeinterface java.security.Principal.getName:()Ljava/lang/String;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        11: .line 552
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.roleClasses:Ljava/util/List;
            aload 8 /* principalClass */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 15
        12: .line 553
            aload 4 /* roles */
            aload 6 /* principal */
            invokeinterface java.security.Principal.getName:()Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        13: .line 554
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 15
        14: .line 555
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.rolePrincipalAdd"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* principal */
            invokeinterface java.security.Principal.getName:()Ljava/lang/String;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        end local 8 // java.lang.String principalClass
        end local 6 // java.security.Principal principal
        15: .line 538
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.Subject javax.security.auth.login.LoginContext java.util.List java.security.Principal top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        16: .line 561
            aload 5 /* userPrincipal */
            ifnonnull 21
        17: .line 562
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 20
        18: .line 563
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.userPrincipalFailure"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        19: .line 564
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.rolePrincipalFailure"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        20: .line 566
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String javax.security.auth.Subject javax.security.auth.login.LoginContext java.util.List java.security.Principal
      StackMap stack:
            aconst_null
            areturn
        21: .line 568
      StackMap locals:
      StackMap stack:
            aload 4 /* roles */
            invokeinterface java.util.List.size:()I
            ifne 24
        22: .line 569
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 24
        23: .line 570
            getstatic org.apache.catalina.realm.JAASRealm.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JAASRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jaasRealm.rolePrincipalFailure"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        24: .line 576
      StackMap locals:
      StackMap stack:
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 1 /* username */
            aload 4 /* roles */
            aload 5 /* userPrincipal */
        25: .line 577
            aload 3 /* loginContext */
        26: .line 576
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;Ljava/security/Principal;Ljavax/security/auth/login/LoginContext;)V
            areturn
        end local 5 // java.security.Principal userPrincipal
        end local 4 // java.util.List roles
        end local 3 // javax.security.auth.login.LoginContext loginContext
        end local 2 // javax.security.auth.Subject subject
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   27     0            this  Lorg/apache/catalina/realm/JAASRealm;
            0   27     1        username  Ljava/lang/String;
            0   27     2         subject  Ljavax/security/auth/Subject;
            0   27     3    loginContext  Ljavax/security/auth/login/LoginContext;
            1   27     4           roles  Ljava/util/List<Ljava/lang/String;>;
            2   27     5   userPrincipal  Ljava/security/Principal;
            4   15     6       principal  Ljava/security/Principal;
            5   15     8  principalClass  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      username      
      subject       
      loginContext  

  protected java.lang.String makeLegalForJAAS(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.JAASRealm this
        start local 1 // java.lang.String src
         0: .line 590
            aload 1 /* src */
            astore 2 /* result */
        start local 2 // java.lang.String result
         1: .line 593
            aload 2 /* result */
            ifnonnull 3
         2: .line 594
            ldc "other"
            astore 2 /* result */
         3: .line 599
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* result */
            ldc "/"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 5
         4: .line 600
            aload 2 /* result */
            iconst_1
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 2 /* result */
         5: .line 603
      StackMap locals:
      StackMap stack:
            aload 2 /* result */
            areturn
        end local 2 // java.lang.String result
        end local 1 // java.lang.String src
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lorg/apache/catalina/realm/JAASRealm;
            0    6     1     src  Ljava/lang/String;
            1    6     2  result  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      src   final

  protected void startInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 623
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.userClassNames:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.userClasses:Ljava/util/List;
            invokevirtual org.apache.catalina.realm.JAASRealm.parseClassNames:(Ljava/lang/String;Ljava/util/List;)V
         1: .line 624
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.roleClassNames:Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.roleClasses:Ljava/util/List;
            invokevirtual org.apache.catalina.realm.JAASRealm.parseClassNames:(Ljava/lang/String;Ljava/util/List;)V
         2: .line 626
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.startInternal:()V
         3: .line 627
            return
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/apache/catalina/realm/JAASRealm;
    Exceptions:
      throws org.apache.catalina.LifecycleException

  protected javax.security.auth.login.Configuration getConfig();
    descriptor: ()Ljavax/security/auth/login/Configuration;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=8, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 636
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.configFile:Ljava/lang/String;
            astore 1 /* configFile */
        start local 1 // java.lang.String configFile
         1: .line 638
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.jaasConfigurationLoaded:Z
            ifeq 4
         2: .line 639
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.jaasConfiguration:Ljavax/security/auth/login/Configuration;
         3: areturn
         4: .line 641
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         5: .line 642
            aload 1 /* configFile */
            ifnonnull 9
         6: .line 643
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.jaasConfigurationLoaded:Z
         7: .line 644
            aload 2
            monitorexit
         8: aconst_null
            areturn
         9: .line 646
      StackMap locals: org.apache.catalina.realm.JAASRealm
      StackMap stack:
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            aload 1 /* configFile */
            invokevirtual java.lang.ClassLoader.getResource:(Ljava/lang/String;)Ljava/net/URL;
            astore 3 /* resource */
        start local 3 // java.net.URL resource
        10: .line 647
            aload 3 /* resource */
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            astore 4 /* uri */
        start local 4 // java.net.URI uri
        11: .line 650
            ldc "com.sun.security.auth.login.ConfigFile"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
        12: .line 649
            astore 5 /* sunConfigFile */
        start local 5 // java.lang.Class sunConfigFile
        13: .line 652
            aload 5 /* sunConfigFile */
            iconst_1
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Ljava/net/URI;
            aastore
            invokevirtual java.lang.Class.getConstructor:([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
        14: .line 651
            astore 6 /* constructor */
        start local 6 // java.lang.reflect.Constructor constructor
        15: .line 653
            aload 6 /* constructor */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* uri */
            aastore
            invokevirtual java.lang.reflect.Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
            checkcast javax.security.auth.login.Configuration
            astore 7 /* config */
        start local 7 // javax.security.auth.login.Configuration config
        16: .line 654
            aload 0 /* this */
            aload 7 /* config */
            putfield org.apache.catalina.realm.JAASRealm.jaasConfiguration:Ljavax/security/auth/login/Configuration;
        17: .line 655
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JAASRealm.jaasConfigurationLoaded:Z
        18: .line 656
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.jaasConfiguration:Ljavax/security/auth/login/Configuration;
            aload 2
            monitorexit
        19: areturn
        end local 7 // javax.security.auth.login.Configuration config
        end local 6 // java.lang.reflect.Constructor constructor
        end local 5 // java.lang.Class sunConfigFile
        end local 4 // java.net.URI uri
        end local 3 // java.net.URL resource
        20: .line 641
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
        21: athrow
        22: .line 658
      StackMap locals: org.apache.catalina.realm.JAASRealm java.lang.String
      StackMap stack: java.lang.reflect.InvocationTargetException
            astore 2 /* ex */
        start local 2 // java.lang.reflect.InvocationTargetException ex
        23: .line 659
            new java.lang.RuntimeException
            dup
            aload 2 /* ex */
            invokevirtual java.lang.reflect.InvocationTargetException.getCause:()Ljava/lang/Throwable;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.reflect.InvocationTargetException ex
        24: .line 661
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 2 /* ex */
        start local 2 // java.lang.Exception ex
        25: .line 662
            new java.lang.RuntimeException
            dup
            aload 2 /* ex */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.Exception ex
        end local 1 // java.lang.String configFile
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   26     0           this  Lorg/apache/catalina/realm/JAASRealm;
            1   26     1     configFile  Ljava/lang/String;
           10   20     3       resource  Ljava/net/URL;
           11   20     4            uri  Ljava/net/URI;
           13   20     5  sunConfigFile  Ljava/lang/Class<Ljavax/security/auth/login/Configuration;>;
           15   20     6    constructor  Ljava/lang/reflect/Constructor<Ljavax/security/auth/login/Configuration;>;
           16   20     7         config  Ljavax/security/auth/login/Configuration;
           23   24     2             ex  Ljava/lang/reflect/InvocationTargetException;
           25   26     2             ex  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           5     8      20  any
           9    19      20  any
          20    21      20  any
           1     3      22  Class java.lang.reflect.InvocationTargetException
           4     8      22  Class java.lang.reflect.InvocationTargetException
           9    19      22  Class java.lang.reflect.InvocationTargetException
          20    22      22  Class java.lang.reflect.InvocationTargetException
           1     3      24  Class java.lang.SecurityException
           4     8      24  Class java.lang.SecurityException
           9    19      24  Class java.lang.SecurityException
          20    22      24  Class java.lang.SecurityException
           1     3      24  Class java.net.URISyntaxException
           4     8      24  Class java.net.URISyntaxException
           9    19      24  Class java.net.URISyntaxException
          20    22      24  Class java.net.URISyntaxException
           1     3      24  Class java.lang.ReflectiveOperationException
           4     8      24  Class java.lang.ReflectiveOperationException
           9    19      24  Class java.lang.ReflectiveOperationException
          20    22      24  Class java.lang.ReflectiveOperationException
           1     3      24  Class java.lang.IllegalArgumentException
           4     8      24  Class java.lang.IllegalArgumentException
           9    19      24  Class java.lang.IllegalArgumentException
          20    22      24  Class java.lang.IllegalArgumentException

  public boolean isAvailable();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JAASRealm this
         0: .line 668
            aload 0 /* this */
            getfield org.apache.catalina.realm.JAASRealm.invocationSuccess:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JAASRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JAASRealm;
}
SourceFile: "JAASRealm.java"