Index: java/org/apache/catalina/Realm.java =================================================================== --- java/org/apache/catalina/Realm.java (revision 1763785) +++ java/org/apache/catalina/Realm.java (working copy) @@ -231,4 +231,13 @@ * @return principal roles */ public String[] getRoles(Principal principal); + + + /** + * Return the availability of the realm for authentication. + * @return true if the realm is able to perform authentication + */ + default public boolean isUp() { + return true; + } } Index: java/org/apache/catalina/realm/CombinedRealm.java =================================================================== --- java/org/apache/catalina/realm/CombinedRealm.java (revision 1763785) +++ java/org/apache/catalina/realm/CombinedRealm.java (working copy) @@ -418,4 +418,15 @@ throw uoe; } + + @Override + public boolean isUp() { + for (Realm realm : realms) { + if (!realm.isUp()) { + return false; + } + } + return true; + } + } Index: java/org/apache/catalina/realm/JNDIRealm.java =================================================================== --- java/org/apache/catalina/realm/JNDIRealm.java (revision 1763785) +++ java/org/apache/catalina/realm/JNDIRealm.java (working copy) @@ -2379,6 +2379,13 @@ } + + @Override + public boolean isUp() { + // Simple best effort check + return (context != null); + } + private DirContext createDirContext(Hashtable env) throws NamingException { if (useStartTls) { return createTlsDirContext(env); Index: java/org/apache/catalina/realm/LockOutRealm.java =================================================================== --- java/org/apache/catalina/realm/LockOutRealm.java (revision 1763785) +++ java/org/apache/catalina/realm/LockOutRealm.java (working copy) @@ -212,7 +212,7 @@ */ private Principal filterLockedAccounts(String username, Principal authenticatedUser) { // Register all failed authentications - if (authenticatedUser == null) { + if (authenticatedUser == null && isUp()) { registerAuthFailure(username); }