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

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new ebbd1875f5 Add configuration source for configFile attribute
ebbd1875f5 is described below

commit ebbd1875f513066f4dec307f4e6a498e2284d109
Author: remm <r...@apache.org>
AuthorDate: Mon Jun 24 11:32:39 2024 +0200

    Add configuration source for configFile attribute
    
    Much easier to use for testing.
---
 java/org/apache/catalina/realm/JAASRealm.java      | 24 ++++++++++++++++------
 .../apache/catalina/realm/LocalStrings.properties  |  1 +
 webapps/docs/changelog.xml                         |  8 ++++++++
 3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/java/org/apache/catalina/realm/JAASRealm.java 
b/java/org/apache/catalina/realm/JAASRealm.java
index b815ab14a7..91b5d77649 100644
--- a/java/org/apache/catalina/realm/JAASRealm.java
+++ b/java/org/apache/catalina/realm/JAASRealm.java
@@ -16,6 +16,7 @@
  */
 package org.apache.catalina.realm;
 
+import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
@@ -40,12 +41,13 @@ import org.apache.catalina.LifecycleException;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.file.ConfigFileLoader;
+import org.apache.tomcat.util.file.ConfigurationSource;
 
 /**
  * <p>
  * Implementation of <b>Realm</b> that authenticates users via the <em>Java 
Authentication and Authorization
- * Service</em> (JAAS). JAAS support requires either JDK 1.4 (which includes 
it as part of the standard platform) or JDK
- * 1.3 (with the plug-in <code>jaas.jar</code> file).
+ * Service</em> (JAAS).
  * </p>
  * <p>
  * The value configured for the <code>appName</code> property is passed to the
@@ -593,15 +595,25 @@ public class JAASRealm extends RealmBase {
                     jaasConfigurationLoaded = true;
                     return null;
                 }
-                URL resource = 
Thread.currentThread().getContextClassLoader().getResource(configFile);
-                URI uri = resource.toURI();
                 @SuppressWarnings("unchecked")
                 Class<Configuration> sunConfigFile =
                         (Class<Configuration>) 
Class.forName("com.sun.security.auth.login.ConfigFile");
                 Constructor<Configuration> constructor = 
sunConfigFile.getConstructor(URI.class);
-                Configuration config = constructor.newInstance(uri);
+                URL resource = 
Thread.currentThread().getContextClassLoader().getResource(configFile);
+                Configuration config = null;
+                if (resource == null) {
+                    try (ConfigurationSource.Resource configFileResource = 
ConfigFileLoader.getSource().getResource(configFile)) {
+                        config = 
constructor.newInstance(configFileResource.getURI());
+                        this.jaasConfigurationLoaded = true;
+                    } catch (IOException ioe) {
+                        throw new 
RuntimeException(sm.getString("jaasRealm.configFileNotFound", configFile));
+                    }
+                } else {
+                    URI uri = resource.toURI();
+                    config = constructor.newInstance(uri);
+                    this.jaasConfigurationLoaded = true;
+                }
                 this.jaasConfiguration = config;
-                this.jaasConfigurationLoaded = true;
                 return this.jaasConfiguration;
             }
         } catch (InvocationTargetException ex) {
diff --git a/java/org/apache/catalina/realm/LocalStrings.properties 
b/java/org/apache/catalina/realm/LocalStrings.properties
index 6ee36b31f5..bf6632173f 100644
--- a/java/org/apache/catalina/realm/LocalStrings.properties
+++ b/java/org/apache/catalina/realm/LocalStrings.properties
@@ -52,6 +52,7 @@ jaasRealm.authenticateSuccess=Username [{0}] successfully 
authenticated as Princ
 jaasRealm.beginLogin=JAASRealm login requested for username [{0}] using 
LoginContext for application [{1}]
 jaasRealm.checkPrincipal=Checking Principal [{0}] [{1}]
 jaasRealm.classNotFound=Class [{0}] was not found
+jaasRealm.configFileNotFound=JAAS configuration resource [{0}] was not found
 jaasRealm.credentialExpired=Username [{0}] NOT authenticated due to expired 
credential
 jaasRealm.failedLogin=Username [{0}] NOT authenticated due to failed login
 jaasRealm.loginContextCreated=JAAS LoginContext created for username [{0}]
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 328349c6ca..86cc5c27fd 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -105,6 +105,14 @@
   issues do not "pop up" wrt. others).
 -->
 <section name="Tomcat 9.0.91 (remm)" rtext="in development">
+  <subsection name="Catalina">
+    <changelog>
+      <fix>
+        Allow <code>JAASRealm</code> to use the configuration source to load a
+        configured <code>configFile</code>, for easier use with testing. (remm)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Coyote">
     <changelog>
       <fix>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to