You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2009/05/26 16:50:42 UTC

svn commit: r778726 [2/2] - in /geronimo/server/trunk: framework/modules/geronimo-security/ framework/modules/geronimo-security/src/main/java/org/apache/geronimo/security/jaas/ framework/modules/geronimo-security/src/main/java/org/apache/geronimo/secur...

Modified: geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/JettyWebAppContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/JettyWebAppContext.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/JettyWebAppContext.java (original)
+++ geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/JettyWebAppContext.java Tue May 26 14:50:40 2009
@@ -110,106 +110,6 @@
     public static final String GBEAN_REF_SESSION_HANDLER_FACTORY = "SessionHandlerFactory";
     public static final String GBEAN_REF_PRE_HANDLER_FACTORY = "PreHandlerFactory";
 
-//    static {
-//        GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic("Jetty WebApplication Context", JettyWebAppContext.class, NameFactory.WEB_MODULE);
-//        infoBuilder.addAttribute("deploymentDescriptor", String.class, true);
-//        //from jetty7's webapp context
-//
-//        infoBuilder.addAttribute("displayName", String.class, true);
-//        infoBuilder.addAttribute("contextParamMap", Map.class, true);
-//        infoBuilder.addAttribute("listenerClassNames", Collection.class, true);
-//        infoBuilder.addAttribute("distributable", boolean.class, true);
-//
-//        infoBuilder.addAttribute("mimeMap", Map.class, true);
-//        infoBuilder.addAttribute("welcomeFiles", String[].class, true);
-//        infoBuilder.addAttribute("localeEncodingMapping", Map.class, true);
-//        infoBuilder.addAttribute("errorPages", Map.class, true);
-//        infoBuilder.addAttribute("authenticator", Authenticator.class, true);
-//        infoBuilder.addAttribute("realmName", String.class, true);
-//        infoBuilder.addAttribute("tagLibMap", Map.class, true);
-//        infoBuilder.addAttribute(GBEAN_ATTR_SESSION_TIMEOUT, int.class, true);
-//        infoBuilder.addReference(GBEAN_REF_SESSION_HANDLER_FACTORY, SessionHandlerFactory.class,
-//                NameFactory.GERONIMO_SERVICE);
-//        infoBuilder.addReference(GBEAN_REF_PRE_HANDLER_FACTORY, PreHandlerFactory.class, NameFactory.GERONIMO_SERVICE);
-//
-//        infoBuilder.addAttribute("componentContext", Map.class, true);
-//        infoBuilder.addAttribute("classLoader", ClassLoader.class, false);
-//        infoBuilder.addAttribute("configurationBaseUrl", URL.class, true);
-//        infoBuilder.addAttribute("unshareableResources", Set.class, true);
-//        infoBuilder.addAttribute("applicationManagedSecurityResources", Set.class, true);
-//
-//        infoBuilder.addAttribute("contextPath", String.class, true);
-//        infoBuilder.addAttribute("compactPath", boolean.class, true);
-//
-//        infoBuilder.addAttribute("workDir", String.class, true);
-//        infoBuilder.addReference("Host", Host.class, "Host");
-//        infoBuilder.addReference("TransactionManager", TransactionManager.class, NameFactory.JTA_RESOURCE);
-//        infoBuilder.addReference("TrackedConnectionAssociator", TrackedConnectionAssociator.class, NameFactory.JCA_CONNECTION_TRACKER);
-//        infoBuilder.addReference("JettyContainer", JettyContainer.class, NameFactory.GERONIMO_SERVICE);
-//        infoBuilder.addReference("ContextCustomizer", RuntimeCustomizer.class, NameFactory.GERONIMO_SERVICE);
-//
-//        infoBuilder.addInterface(JettyServletRegistration.class);
-//
-//        infoBuilder.addAttribute("policyContextID", String.class, true);
-//        infoBuilder.addAttribute("securityRealmName", String.class, true);
-//        infoBuilder.addReference("RunAsSource", RunAsSource.class, NameFactory.JACC_MANAGER);
-//
-//        infoBuilder.addAttribute("holder", Holder.class, true);
-//
-//        infoBuilder.addReference("J2EEServer", J2EEServer.class);
-//        infoBuilder.addReference("J2EEApplication", J2EEApplication.class);
-//
-//        infoBuilder.addAttribute("kernel", Kernel.class, false);
-//        infoBuilder.addAttribute("objectName", String.class, false);
-//        infoBuilder.addAttribute("application", String.class, false);
-//        infoBuilder.addAttribute("javaVMs", String[].class, false);
-//        infoBuilder.addAttribute("servlets", String[].class, false);
-//
-//        infoBuilder.addInterface(WebModule.class);
-//
-//        infoBuilder.setConstructor(new String[]{
-//                "objectName",
-//                "deploymentDescriptor",
-//                "componentContext",
-//                "classLoader",
-//                "configurationBaseUrl",
-//                "unshareableResources",
-//                "applicationManagedSecurityResources",
-//
-//                "displayName",
-//                "contextParamMap",
-//                "listenerClassNames",
-//                "distributable",
-//                "mimeMap",
-//                "welcomeFiles",
-//                "localeEncodingMapping",
-//                "errorPages",
-//                "authenticator",
-//                "realmName",
-//                "tagLibMap",
-//                "compactPath",
-//                GBEAN_ATTR_SESSION_TIMEOUT,
-//                GBEAN_REF_SESSION_HANDLER_FACTORY,
-//                GBEAN_REF_PRE_HANDLER_FACTORY,
-//
-//                "policyContextID",
-//                "securityRealmName",
-//                "RunAsSource",
-//
-//                "holder",
-//
-//                "Host",
-//                "TransactionManager",
-//                "TrackedConnectionAssociator",
-//                "JettyContainer",
-//                "ContextCustomizer",
-//
-//                "J2EEServer",
-//                "J2EEApplication",
-//                "kernel"
-//        });
-//
-//    }
 
     public JettyWebAppContext(@ParamSpecial(type = SpecialAttributeType.objectName)String objectName,
                               @ParamAttribute(name = "contextPath")String contextPath,
@@ -284,7 +184,6 @@
             //TODO may need to turn off security with Context._options.
 //            securityHandler = new NoSecurityHandler();
         }
-//        }
 
         ServletHandler servletHandler = new ServletHandler();
 

Modified: geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/handler/JettySecurityHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/handler/JettySecurityHandler.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/handler/JettySecurityHandler.java (original)
+++ geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/handler/JettySecurityHandler.java Tue May 26 14:50:40 2009
@@ -47,7 +47,9 @@
     public JettySecurityHandler(
             String policyContextID,
             Authenticator authenticator,
-            final LoginService loginService, IdentityService identityService, AccessControlContext defaultAcc) {
+            final LoginService loginService,
+            IdentityService identityService,
+            AccessControlContext defaultAcc) {
         setAuthenticator(authenticator);
         this.policyContextID = policyContextID;
         this.defaultAcc = defaultAcc;

Modified: geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/AuthConfigProviderHandlerFactory.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/AuthConfigProviderHandlerFactory.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/AuthConfigProviderHandlerFactory.java (original)
+++ geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/AuthConfigProviderHandlerFactory.java Tue May 26 14:50:40 2009
@@ -33,10 +33,12 @@
 
 import org.apache.geronimo.gbean.annotation.GBean;
 import org.apache.geronimo.gbean.annotation.ParamAttribute;
+import org.apache.geronimo.gbean.annotation.ParamReference;
 import org.apache.geronimo.jetty7.handler.JettySecurityHandler;
 import org.apache.geronimo.jetty7.security.auth.JAASLoginService;
 import org.apache.geronimo.security.jacc.RunAsSource;
 import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.eclipse.jetty.security.Authenticator;
 import org.eclipse.jetty.security.LoginService;
 import org.eclipse.jetty.security.IdentityService;
@@ -62,14 +64,12 @@
     private final LoginService loginService;
     private final ServerAuthConfig serverAuthConfig;
     private final ServletCallbackHandler servletCallbackHandler;
-//    private final IdentityService identityService;
-//    private final AccessControlContext defaultAcc;
 
 
     public AuthConfigProviderHandlerFactory(@ParamAttribute(name = "messageLayer")String messageLayer,
                                             @ParamAttribute(name = "appContext")String appContext,
-                                            @ParamAttribute(name = "securityRealm")String securityRealm,
-                                            @ParamAttribute(name = "allowLazyAuthentication") boolean allowLazyAuthentication
+                                            @ParamAttribute(name = "allowLazyAuthentication") boolean allowLazyAuthentication,
+                                            @ParamReference(name = "ConfigurationFactory") ConfigurationFactory configurationFactory
     ) throws AuthException {
         this.appContext = appContext;
         this.allowLazyAuthentication = allowLazyAuthentication;
@@ -80,7 +80,7 @@
             }
         };
         AuthConfigProvider authConfigProvider = authConfigFactory.getConfigProvider(messageLayer, appContext, listener);
-        this.loginService = new JAASLoginService(securityRealm, null);
+        this.loginService = new JAASLoginService(configurationFactory, null);
         servletCallbackHandler = new ServletCallbackHandler(loginService);
         serverAuthConfig = authConfigProvider.getServerAuthConfig(messageLayer, appContext, servletCallbackHandler);
         //TODO appContext is supposed to be server-name<space>context-root

Modified: geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/JettySecurityHandlerFactory.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/JettySecurityHandlerFactory.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/JettySecurityHandlerFactory.java (original)
+++ geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/JettySecurityHandlerFactory.java Tue May 26 14:50:40 2009
@@ -26,9 +26,11 @@
 
 import org.apache.geronimo.gbean.annotation.GBean;
 import org.apache.geronimo.gbean.annotation.ParamAttribute;
+import org.apache.geronimo.gbean.annotation.ParamReference;
 import org.apache.geronimo.jetty7.handler.JettySecurityHandler;
 import org.apache.geronimo.jetty7.security.auth.JAASLoginService;
 import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.security.jacc.RunAsSource;
 import org.eclipse.jetty.security.Authenticator;
 import org.eclipse.jetty.security.IdentityService;
@@ -49,28 +51,28 @@
     private final String loginPage;
     private final String errorPage;
     private final String realmName;
-    private final String securityRealm;
+    private final ConfigurationFactory configurationFactory;
 
     public JettySecurityHandlerFactory(@ParamAttribute(name = "authMethod")BuiltInAuthMethod authMethod,
                                        @ParamAttribute(name = "loginPage")String loginPage,
                                        @ParamAttribute(name = "errorPage")String errorPage,
                                        @ParamAttribute(name = "realmName")String realmName,
-                                       @ParamAttribute(name = "securityRealm")String securityRealm) {
+                                       @ParamReference(name = "ConfigurationFactory") ConfigurationFactory configurationFactory) {
         if (authMethod == null) {
             throw new NullPointerException("authMethod required");
         }
-        if (securityRealm == null) {
-            throw new NullPointerException("securityRealm required");
+        if (configurationFactory == null) {
+            throw new NullPointerException("configurationFactory required");
         }
         this.authMethod = authMethod;
         this.loginPage = loginPage;
         this.errorPage = errorPage;
         this.realmName = realmName;
-        this.securityRealm = securityRealm;
+        this.configurationFactory = configurationFactory;
     }
 
     public JettySecurityHandler buildSecurityHandler(String policyContextID, Subject defaultSubject, RunAsSource runAsSource) {
-        final LoginService loginService = new JAASLoginService(securityRealm, realmName);
+        final LoginService loginService = new JAASLoginService(configurationFactory, realmName);
         Authenticator authenticator;
         if (authMethod == BuiltInAuthMethod.BASIC) {
             authenticator = new BasicAuthenticator();

Modified: geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/auth/JAASLoginService.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/auth/JAASLoginService.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/auth/JAASLoginService.java (original)
+++ geronimo/server/trunk/plugins/jetty7/geronimo-jetty7/src/main/java/org/apache/geronimo/jetty7/security/auth/JAASLoginService.java Tue May 26 14:50:40 2009
@@ -28,6 +28,7 @@
 import javax.security.auth.login.LoginException;
 
 import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.security.realm.providers.PasswordCallbackHandler;
 import org.eclipse.jetty.security.IdentityService;
 import org.eclipse.jetty.security.LoginService;
@@ -37,12 +38,17 @@
  * @version $Rev$ $Date$
  */
 public class JAASLoginService implements LoginService {
-    private final String securityRealm;
     private final String realmName;
+    private final ConfigurationFactory configurationFactory;
     private IdentityService identityService;
 
-    public JAASLoginService(String securityRealm, String realmName) {
-        this.securityRealm = securityRealm;
+    /**
+     * Construct a JAASLoginService
+     * @param configurationFactory may be null if auth system does not require local jaas login (such as openid)
+     * @param realmName may be null e.g. for jaspi.
+     */
+    public JAASLoginService(ConfigurationFactory configurationFactory, String realmName) {
+        this.configurationFactory = configurationFactory;
         this.realmName = realmName;
     }
 
@@ -58,7 +64,7 @@
         char[] password = credentials instanceof  String? ((String)credentials).toCharArray(): (char[]) credentials;
         CallbackHandler callbackHandler = new PasswordCallbackHandler(username, password);
         try {
-            LoginContext loginContext = ContextManager.login(securityRealm, callbackHandler);
+            LoginContext loginContext = ContextManager.login(configurationFactory.getConfigurationName(), callbackHandler, configurationFactory.getConfiguration());
             Subject establishedSubject = loginContext.getSubject();
             Principal userPrincipal = ContextManager.getCurrentPrincipal(establishedSubject);
             return identityService.newUserIdentity(establishedSubject, userPrincipal, null);

Modified: geronimo/server/trunk/plugins/monitoring/agent-ds/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-ds/src/main/plan/plan.xml?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/monitoring/agent-ds/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/monitoring/agent-ds/src/main/plan/plan.xml Tue May 26 14:50:40 2009
@@ -83,7 +83,7 @@
     <gbean name="monitoring-runas-realm"
         class="org.apache.geronimo.security.realm.GenericSecurityRealm">
         <attribute name="realmName">monitoring-runas-realm</attribute>
-        <attribute name="publish">false</attribute>
+        <attribute name="global">false</attribute>
         <xml-reference name="LoginModuleConfiguration">
             <lc:login-config xmlns:lc="http://geronimo.apache.org/xml/ns/loginconfig-1.2">
                 <lc:login-module control-flag="REQUIRED">

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Tue May 26 14:50:40 2009
@@ -30,6 +30,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.Collections;
 import java.util.jar.JarFile;
 
 import javax.servlet.Servlet;
@@ -68,6 +69,7 @@
 import org.apache.geronimo.naming.deployment.GBeanResourceEnvironmentBuilder;
 import org.apache.geronimo.naming.deployment.ResourceEnvironmentSetter;
 import org.apache.geronimo.security.jacc.ComponentPermissions;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.tomcat.LifecycleListenerGBean;
 import org.apache.geronimo.tomcat.ManagerGBean;
 import org.apache.geronimo.tomcat.RealmGBean;
@@ -467,9 +469,10 @@
                 }
 
                 SecurityHolder securityHolder = new SecurityHolder();
-                securityHolder.setSecurityRealm(tomcatWebApp.getSecurityRealmName().trim());
+                String securityRealmName = tomcatWebApp.getSecurityRealmName().trim();
 
                 webModuleData.setReferencePattern("RunAsSource", (AbstractNameQuery)earContext.getGeneralData().get(ROLE_MAPPER_DATA_NAME));
+                webModuleData.setReferencePattern("ConfigurationFactory", new AbstractNameQuery(null, Collections.singletonMap("name", securityRealmName), ConfigurationFactory.class.getName()));
 
                 /**
                  * TODO - go back to commented version when possible.

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java Tue May 26 14:50:40 2009
@@ -262,19 +262,19 @@
         securityService.setReferencePattern("ServerInfo", serverInfo.getAbstractName());
 
         // Default Realm
-        Map initParams = new HashMap();
-
-        initParams.put("userClassNames",
-                "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
-        initParams.put("roleClassNames",
-                "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
-        GBeanData realm = bootstrap.addGBean("tomcatRealm", RealmGBean.GBEAN_INFO);
-        realm.setAttribute("className",
-                "org.apache.geronimo.tomcat.realm.TomcatJAASRealm");
-        realm.setAttribute("initParams", initParams);
+//        Map initParams = new HashMap();
+//
+//        initParams.put("userClassNames",
+//                "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
+//        initParams.put("roleClassNames",
+//                "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
+//        GBeanData realm = bootstrap.addGBean("tomcatRealm", RealmGBean.GBEAN_INFO);
+//        realm.setAttribute("className",
+//                "org.apache.geronimo.tomcat.realm.TomcatJAASRealm");
+//        realm.setAttribute("initParams", initParams);
 
         // Default Host
-        initParams = new HashMap();
+        Map initParams = new HashMap();
         initParams.put("workDir", "work");
         initParams.put("name", "localhost");
         initParams.put("appBase", "");
@@ -289,7 +289,7 @@
         engine.setAttribute("className", "org.apache.geronimo.tomcat.TomcatEngine");
         engine.setAttribute("initParams", initParams);
         engine.setReferencePattern("DefaultHost", host.getAbstractName());
-        engine.setReferencePattern("RealmGBean", realm.getAbstractName());
+//        engine.setReferencePattern("RealmGBean", realm.getAbstractName());
 
         WebServiceBuilder webServiceBuilder = new MockWebServiceBuilder();
 

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/resources/deployables/war4/WEB-INF/geronimo-web.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/resources/deployables/war4/WEB-INF/geronimo-web.xml?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/resources/deployables/war4/WEB-INF/geronimo-web.xml (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6-builder/src/test/resources/deployables/war4/WEB-INF/geronimo-web.xml Tue May 26 14:50:40 2009
@@ -51,6 +51,7 @@
             userClassNames=org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal
             roleClassNames=org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal
         </attribute>
+        <reference name="ConfigurationFactory"><name>securityRealm</name></reference>
     </gbean>
 
     <gbean name="FirstValve" class="org.apache.geronimo.tomcat.ValveGBean">
@@ -69,4 +70,32 @@
             pattern=common
         </attribute>
     </gbean>
+
+    <gbean name="properties-login"
+        class="org.apache.geronimo.security.jaas.LoginModuleGBean">
+        <attribute name="loginModuleClass">org.apache.geronimo.security.realm.providers.PropertiesFileLoginModule</attribute>
+        <attribute name="options">
+            usersURI=var/security/users.properties
+            groupsURI=var/security/groups.properties
+        </attribute>
+        <attribute name="loginDomainName">geronimo-admin</attribute>
+    </gbean>
+
+    <gbean name="securityRealm"
+        class="org.apache.geronimo.security.realm.GenericSecurityRealm">
+        <attribute name="realmName">securityRealm</attribute>
+        <attribute name="global">true</attribute>
+        <reference name="LoginModuleConfiguration">
+            <name>properties-login</name>
+        </reference>
+        <reference name="ServerInfo"><name>ServerInfo</name></reference>
+    </gbean>
+
+    <gbean name="properties-login" class="org.apache.geronimo.security.jaas.JaasLoginModuleUse">
+         <attribute name="controlFlag">REQUIRED</attribute>
+         <reference name="LoginModule">
+             <name>properties-login</name>
+         </reference>
+     </gbean>
+
 </web-app>

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/EngineGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/EngineGBean.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/EngineGBean.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/EngineGBean.java Tue May 26 14:50:40 2009
@@ -39,6 +39,8 @@
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.system.jmx.MBeanServerReference;
 import org.apache.geronimo.tomcat.cluster.CatalinaClusterGBean;
+import org.apache.geronimo.tomcat.realm.TomcatJAASRealm;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.tomcat.util.modeler.Registry;
 
 /**
@@ -57,6 +59,7 @@
             Map initParams,
             HostGBean defaultHost,
             ObjectRetriever realmGBean,
+            ConfigurationFactory configurationFactory,
             ValveGBean tomcatValveChain,
             LifecycleListenerGBean listenerChain,
             CatalinaClusterGBean clusterGBean,
@@ -96,6 +99,9 @@
         //Set realm (must be before Hosts)
         if (realmGBean != null){
             engine.setRealm((Realm)realmGBean.getInternalObject());
+        } else if (configurationFactory != null) {
+            Realm realm = new TomcatJAASRealm(configurationFactory);
+            engine.setRealm(realm);
         }
         
         //Set the default Host
@@ -171,17 +177,18 @@
         infoFactory.addAttribute("initParams", Map.class, true);
         infoFactory.addReference("DefaultHost", HostGBean.class, HostGBean.J2EE_TYPE);
         infoFactory.addReference("RealmGBean", ObjectRetriever.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+        infoFactory.addReference("ConfigurationFactory", ConfigurationFactory.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
         infoFactory.addReference("TomcatValveChain", ValveGBean.class, ValveGBean.J2EE_TYPE);
         infoFactory.addReference("LifecycleListenerChain", LifecycleListenerGBean.class, LifecycleListenerGBean.J2EE_TYPE);
         infoFactory.addReference("CatalinaCluster", CatalinaClusterGBean.class, CatalinaClusterGBean.J2EE_TYPE);
         infoFactory.addReference("Manager", ManagerGBean.class, ManagerGBean.J2EE_TYPE);
         infoFactory.addReference("MBeanServerReference", MBeanServerReference.class);
-        infoFactory.addOperation("getInternalObject");
-        infoFactory.setConstructor(new String[] { 
+        infoFactory.setConstructor(new String[] {
                 "className", 
                 "initParams", 
                 "DefaultHost",
                 "RealmGBean",
+                "ConfigurationFactory",
                 "TomcatValveChain",
                 "LifecycleListenerChain",
                 "CatalinaCluster",

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/RealmGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/RealmGBean.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/RealmGBean.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/RealmGBean.java Tue May 26 14:50:40 2009
@@ -17,25 +17,37 @@
 package org.apache.geronimo.tomcat;
 
 import java.util.Map;
+import java.lang.reflect.Constructor;
 
 import org.apache.catalina.Realm;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 
 public class RealmGBean extends BaseGBean implements GBeanLifecycle, ObjectRetriever {
     
     private final Realm realm;
 
-    public RealmGBean(String className, Map initParams) throws Exception {
-        super(); // TODO: make it an attribute
-        
-        assert className != null;
-        
-        realm = (Realm)Class.forName(className).newInstance();
+    public RealmGBean(String className, Map initParams, ConfigurationFactory configurationFactory, ClassLoader classLoader) throws Exception {
+        super();
         
+        if (className == null) throw new NullPointerException("No realm class supplied");
+
+        Class<?> clazz = Class.forName(className, true, classLoader);
+        Realm realm;
+        try {
+            Constructor c = clazz.getConstructor(ConfigurationFactory.class);
+            if (configurationFactory == null) {
+                throw new NullPointerException("ConfigurationFactory must be supplied");
+            }
+            realm = (Realm) c.newInstance(configurationFactory);
+        } catch (NoSuchMethodException e) {
+            realm = (Realm) clazz.newInstance();
+        }
+
         setParameters(realm, initParams);
-        
+        this.realm = realm;
     }
 
     public Object getInternalObject() {
@@ -57,9 +69,11 @@
         GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("TomcatRealm", RealmGBean.class);
         infoFactory.addAttribute("className", String.class, true);
         infoFactory.addAttribute("initParams", Map.class, true);
+        infoFactory.addReference("ConfigurationFactory", ConfigurationFactory.class);
+        infoFactory.addAttribute("classLoader", ClassLoader.class, false);
+
 
-        infoFactory.addOperation("getInternalObject");
-        infoFactory.setConstructor(new String[] { "className", "initParams" });
+        infoFactory.setConstructor(new String[] { "className", "initParams", "ConfigurationFactory", "classLoader" });
         GBEAN_INFO = infoFactory.getBeanInfo();
     }
 

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java Tue May 26 14:50:40 2009
@@ -45,6 +45,7 @@
 import org.apache.geronimo.tomcat.util.SecurityHolder;
 import org.apache.geronimo.webservices.SoapHandler;
 import org.apache.geronimo.webservices.WebServiceContainer;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.naming.resources.DirContextURLStreamHandlerFactory;
 
 
@@ -293,10 +294,7 @@
         }
 
         //Get the security-realm-name if there is one
-        String securityRealmName = null;
-        SecurityHolder secHolder = ctx.getSecurityHolder();
-        if (secHolder != null)
-            securityRealmName = secHolder.getSecurityRealm();
+        SecurityHolder secHolder = ctx.getSecurityHolder() == null? new SecurityHolder(): ctx.getSecurityHolder();
 
         //Did we declare a GBean at the context level?
         if (ctx.getRealm() != null) {
@@ -304,54 +302,36 @@
 
             //Allow for the <security-realm-name> override from the
             //geronimo-web.xml file to be used if our Realm is a JAAS type
-            if (securityRealmName != null) {
+            if (secHolder.getConfigurationFactory() != null) {
                 if (realm instanceof JAASRealm) {
-                    ((JAASRealm) realm).setAppName(securityRealmName);
+                    ((JAASRealm) realm).setAppName(secHolder.getConfigurationFactory().getConfigurationName());
                 }
             }
             anotherCtxObj.setRealm(realm);
         } else {
             Realm realm = host.getRealm();
             //Check and see if we have a declared realm name and no match to a parent name
-            if (securityRealmName != null) {
-                String parentRealmName = null;
-                if (realm instanceof JAASRealm) {
-                    parentRealmName = ((JAASRealm) realm).getAppName();
-                }
-
-                //Do we have a match to a parent?
-                if (!securityRealmName.equals(parentRealmName)) {
-                    //No...we need to create a default adapter
-
+            if (secHolder.getConfigurationFactory() != null) {
                     //Is the context requiring JACC?
                     if (secHolder.isSecurity()) {
                         //JACC
-                        realm = new TomcatGeronimoRealm();
+                        realm = new TomcatGeronimoRealm(secHolder.getConfigurationFactory());
                     } else {
                         //JAAS
-                        realm = new TomcatJAASRealm();
+                        realm = new TomcatJAASRealm(secHolder.getConfigurationFactory());
                         ((JAASRealm) realm).setUserClassNames("org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
                         ((JAASRealm) realm).setRoleClassNames("org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
                     }
 
                     if (log.isDebugEnabled()) {
-                        log.debug("The security-realm-name '" + securityRealmName +
+                        log.debug("The security-realm-name '" + secHolder.getConfigurationFactory().getConfigurationName() +
                             "' was specified and a parent (Engine/Host) is not named the same or no RealmGBean was configured for this context. " +
                             "Creating a default " + realm.getClass().getName() +
                             " adapter for this context.");
                     }
 
-                    ((JAASRealm) realm).setAppName(securityRealmName);
-
                     anotherCtxObj.setRealm(realm);
-                } else {                    
-                    //Since the parent holds a realm, no need to set the parent realm for the child context
-                    //For the getRealm() method will automatically delegate the request to its parent
-                    //And if we set the parent's realm to the child context, it will make the realm replace its initial container
-                    //with the child context, somewhat it will cause the child context could not be GCed after it is destroyed.
-                    //anotherCtxObj.setRealm(realm);
-                }
-            } else {                
+            } else {
                 //The same reason with the above
                 //anotherCtxObj.setRealm(realm);
             }
@@ -405,8 +385,8 @@
         embedded.removeConnector(connector);
     }
 
-    public void addWebService(String contextPath, String[] virtualHosts, WebServiceContainer webServiceContainer, String securityRealmName, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) throws Exception {
-        Context webServiceContext = embedded.createEJBWebServiceContext(contextPath, webServiceContainer, securityRealmName, realmName, transportGuarantee, authMethod, protectedMethods, classLoader);
+    public void addWebService(String contextPath, String[] virtualHosts, WebServiceContainer webServiceContainer, ConfigurationFactory configurationFactory, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) throws Exception {
+        Context webServiceContext = embedded.createEJBWebServiceContext(contextPath, webServiceContainer, configurationFactory, realmName, transportGuarantee, authMethod, protectedMethods, classLoader);
 
         String virtualServer;
         if (virtualHosts != null && virtualHosts.length > 0) {

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java Tue May 26 14:50:40 2009
@@ -47,6 +47,7 @@
 import org.slf4j.LoggerFactory;
 import org.apache.geronimo.tomcat.realm.TomcatEJBWSGeronimoRealm;
 import org.apache.geronimo.webservices.WebServiceContainer;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 
 public class TomcatEJBWebServiceContext extends StandardContext{
 
@@ -58,7 +59,7 @@
     private final ClassLoader classLoader;
     private final Set<String> secureMethods;
 
-    public TomcatEJBWebServiceContext(String contextPath, WebServiceContainer webServiceContainer, String securityRealmName, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) {
+    public TomcatEJBWebServiceContext(String contextPath, WebServiceContainer webServiceContainer, ConfigurationFactory configurationFactory, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) {
         this.contextPath = contextPath;
         this.webServiceContainer = webServiceContainer;
         this.secureMethods = initSecureMethods(protectedMethods);
@@ -68,14 +69,10 @@
         this.setDelegate(true);
 
         log.debug("EJB Webservice Context = " + contextPath);
-        if (securityRealmName != null) {
+        if (configurationFactory != null) {
 
-            TomcatEJBWSGeronimoRealm realm = new TomcatEJBWSGeronimoRealm();
-            realm.setAppName(securityRealmName);
-            realm.setUserClassNames("org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
-            realm.setRoleClassNames("org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
+            TomcatEJBWSGeronimoRealm realm = new TomcatEJBWSGeronimoRealm(configurationFactory);
             setRealm(realm);
-            this.realm = realm;
 
             if ("NONE".equals(transportGuarantee)) {
                 isSecureTransportGuarantee = false;

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEngine.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEngine.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEngine.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEngine.java Tue May 26 14:50:40 2009
@@ -37,12 +37,6 @@
             if (configured != null)
                 return configured;
         }
-        
-        //No realms found up the chain, so lets create a default JAAS Realm
-        TomcatJAASRealm defaultRealm = new TomcatJAASRealm();
-        defaultRealm.setUserClassNames("org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
-        defaultRealm.setRoleClassNames("org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
-        this.setRealm(defaultRealm);
-        return defaultRealm;
+        return null;
     }
 }

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java Tue May 26 14:50:40 2009
@@ -23,6 +23,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.geronimo.webservices.WebServiceContainer;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 
 /**
  * @version $Rev$ $Date$
@@ -56,7 +57,7 @@
 
    public Context createEJBWebServiceContext(String contextPath, 
            WebServiceContainer webServiceContainer, 
-           String securityRealmName, 
+           ConfigurationFactory configurationFactory,
            String realmName, 
            String transportGuarantee, 
            String authMethod, 
@@ -66,7 +67,7 @@
         if( log.isDebugEnabled() )
             log.debug("Creating EJBWebService context '" + contextPath + "'.");
 
-        TomcatEJBWebServiceContext context = new TomcatEJBWebServiceContext(contextPath, webServiceContainer, securityRealmName, realmName, transportGuarantee, authMethod, protectedMethods, classLoader);
+        TomcatEJBWebServiceContext context = new TomcatEJBWebServiceContext(contextPath, webServiceContainer, configurationFactory, realmName, transportGuarantee, authMethod, protectedMethods, classLoader);
 
         ContextConfig config = new ContextConfig();
         config.setCustomAuthenticators(authenticators);

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java Tue May 26 14:50:40 2009
@@ -63,6 +63,7 @@
 import org.apache.geronimo.naming.enc.EnterpriseNamingContext;
 import org.apache.geronimo.security.jacc.RunAsSource;
 import org.apache.geronimo.security.SecurityNames;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.tomcat.cluster.CatalinaClusterGBean;
 import org.apache.geronimo.tomcat.stats.ModuleStats;
 import org.apache.geronimo.tomcat.util.SecurityHolder;
@@ -101,7 +102,6 @@
     private final Set applicationManagedSecurityResources;
     private final TrackedConnectionAssociator trackedConnectionAssociator;
     private final SecurityHolder securityHolder;
-    private final RunAsSource runAsSource;
     private final J2EEServer server;
     private final Map webServices;
     private final String objectName;
@@ -119,7 +119,7 @@
     private boolean reset = true;
 
     private final Valve clusteredValve;
-    
+
     public TomcatWebAppContext(
             ClassLoader classLoader,
             String objectName,
@@ -134,7 +134,7 @@
             TrackedConnectionAssociator trackedConnectionAssociator,
             TomcatContainer container,
             RunAsSource runAsSource,
-            ObjectRetriever tomcatRealm,
+            ConfigurationFactory configurationFactory, ObjectRetriever tomcatRealm,
             ObjectRetriever clusteredValveRetriever,
             ValveGBean tomcatValveChain,
             LifecycleListenerGBean lifecycleListenerChain,
@@ -186,10 +186,9 @@
         this.trackedConnectionAssociator = trackedConnectionAssociator;
 
         this.server = server;
-        this.runAsSource = runAsSource == null? RunAsSource.NULL: runAsSource;
         if (securityHolder != null) {
-            securityHolder.setDefaultSubject(this.runAsSource.getDefaultSubject());
-            securityHolder.setRunAsSource(this.runAsSource);
+            securityHolder.setRunAsSource(runAsSource == null? RunAsSource.NULL: runAsSource);
+            securityHolder.setConfigurationFactory(configurationFactory);
         }
 
 
@@ -570,6 +569,7 @@
 
         infoBuilder.addReference("Container", TomcatContainer.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
         infoBuilder.addReference("RunAsSource", RunAsSource.class, SecurityNames.JACC_MANAGER);
+        infoBuilder.addReference("ConfigurationFactory", ConfigurationFactory.class);
         infoBuilder.addReference("TomcatRealm", ObjectRetriever.class);
         infoBuilder.addReference(GBEAN_REF_CLUSTERED_VALVE_RETRIEVER, ObjectRetriever.class);
         infoBuilder.addReference("TomcatValveChain", ValveGBean.class);
@@ -602,6 +602,7 @@
                 "TrackedConnectionAssociator",
                 "Container",
                 "RunAsSource",
+                "ConfigurationFactory",
                 "TomcatRealm",
                 GBEAN_REF_CLUSTERED_VALVE_RETRIEVER,
                 "TomcatValveChain",

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatEJBWSGeronimoRealm.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatEJBWSGeronimoRealm.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatEJBWSGeronimoRealm.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatEJBWSGeronimoRealm.java Tue May 26 14:50:40 2009
@@ -22,6 +22,7 @@
 import org.apache.catalina.connector.Response;
 import org.apache.catalina.deploy.SecurityConstraint;
 import org.apache.catalina.Context;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 
 /**
  * TomcatEJBWSGeronimoRealm is intended only for use with ejb web services in tomcat.
@@ -34,6 +35,10 @@
  */
 public class TomcatEJBWSGeronimoRealm extends TomcatGeronimoRealm {
 
+    public TomcatEJBWSGeronimoRealm(ConfigurationFactory configurationFactory) {
+        super(configurationFactory);
+    }
+
     public boolean hasResourcePermission(Request request,
                                          Response response,
                                          SecurityConstraint[] constraints,

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatGeronimoRealm.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatGeronimoRealm.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatGeronimoRealm.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatGeronimoRealm.java Tue May 26 14:50:40 2009
@@ -41,6 +41,7 @@
 import org.apache.catalina.deploy.SecurityConstraint;
 import org.apache.catalina.realm.JAASRealm;
 import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.security.realm.providers.CertificateChainCallbackHandler;
 import org.apache.geronimo.security.realm.providers.PasswordCallbackHandler;
 import org.apache.geronimo.tomcat.JAASTomcatPrincipal;
@@ -60,15 +61,17 @@
     /**
      * Descriptive information about this <code>Realm</code> implementation.
      */
-    protected static final String info = "org.apache.geronimo.tomcat.TomcatGeronimoRealm/1.0";
+    protected static final String info = "org.apache.geronimo.tomcat.TomcatGeronimoRealm/1.1";
 
     /**
      * Descriptive information about this <code>Realm</code> implementation.
      */
     protected static final String name = "TomcatGeronimoRealm";
 
-    public TomcatGeronimoRealm() {
+    private final ConfigurationFactory configurationFactory;
 
+    public TomcatGeronimoRealm(ConfigurationFactory configurationFactory) {
+        this.configurationFactory = configurationFactory;
     }
 
     public static String setRequestWrapperName(String requestWrapperName) {
@@ -259,11 +262,8 @@
 
             if ((principalName != null) && (!principalName.equals(""))) {
                 LoginContext loginContext = null;
-                if (appName == null)
-                    appName = "Tomcat";
-
                 if (log.isDebugEnabled())
-                    log.debug(sm.getString("jaasRealm.beginLogin", principalName, appName));
+                    log.debug(sm.getString("jaasRealm.beginLogin", principalName, configurationFactory.getConfigurationName()));
 
                 // What if the LoginModule is in the container class loader ?
                 ClassLoader ocl = null;
@@ -274,7 +274,7 @@
                 }
 
                 try {
-                    loginContext = ContextManager.login(appName, callbackHandler);
+                    loginContext = ContextManager.login(configurationFactory.getConfigurationName(), callbackHandler, configurationFactory.getConfiguration());
                 } catch (AccountExpiredException e) {
                     if (log.isDebugEnabled())
                         log.debug(sm.getString("jaasRealm.accountExpired", principalName));

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatJAASRealm.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatJAASRealm.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatJAASRealm.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/realm/TomcatJAASRealm.java Tue May 26 14:50:40 2009
@@ -21,6 +21,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 import org.apache.geronimo.tomcat.JAASTomcatPrincipal;
 
 import javax.security.auth.Subject;
@@ -38,20 +39,21 @@
 public class TomcatJAASRealm extends JAASRealm implements Cloneable {
     private static final Logger log = LoggerFactory.getLogger(TomcatJAASRealm.class);
 
-    private static final String DEFAULT_NAME = "tomcat";
-
     /**
      * Descriptive information about this <code>Realm</code> implementation.
      */
-    protected static final String info = "org.apache.geronimo.tomcat.realm.TomcatJAASRealm/1.0";
+    protected static final String info = "org.apache.geronimo.tomcat.realm.TomcatJAASRealm/1.1";
 
     /**
      * Descriptive information about this <code>Realm</code> implementation.
      */
     protected static final String name = "TomcatJAASRealm";
 
-    public TomcatJAASRealm() {
+    private final ConfigurationFactory configurationFactory;
+
+    public TomcatJAASRealm(ConfigurationFactory configurationFactory) {
         super();
+        this.configurationFactory = configurationFactory;
     }
 
 
@@ -74,11 +76,9 @@
         // Establish a LoginContext to use for authentication
         try {
             LoginContext loginContext = null;
-            if (appName == null)
-                appName = DEFAULT_NAME;
 
             if (log.isDebugEnabled())
-                log.debug(sm.getString("jaasRealm.beginLogin", username, appName));
+                log.debug(sm.getString("jaasRealm.beginLogin", username, configurationFactory.getConfigurationName()));
 
             // What if the LoginModule is in the container class loader ?
             ClassLoader ocl = null;
@@ -89,7 +89,7 @@
             }
 
             try {
-                loginContext = ContextManager.login(appName, new JAASCallbackHandler(this, username, credentials));
+                loginContext = ContextManager.login(configurationFactory.getConfigurationName(), new JAASCallbackHandler(this, username, credentials), configurationFactory.getConfiguration());
             } catch (AccountExpiredException e) {
                 if (log.isDebugEnabled())
                     log.debug(sm.getString("jaasRealm.accountExpired", username));

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/util/SecurityHolder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/util/SecurityHolder.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/util/SecurityHolder.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/util/SecurityHolder.java Tue May 26 14:50:40 2009
@@ -21,6 +21,7 @@
 import javax.security.auth.Subject;
 
 import org.apache.geronimo.security.jacc.RunAsSource;
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
 
 public class SecurityHolder implements Serializable
 {
@@ -28,27 +29,13 @@
     private static final long serialVersionUID = 3761404231197734961L;
 
     private String policyContextID;
-    private Subject defaultSubject;
-    private String securityRealm;
     private boolean security;
-    private RunAsSource runAsSource;
-
-    public String getSecurityRealm() {
-        return securityRealm;
-    }
-
-    public void setSecurityRealm(String securityRealm) {
-        this.securityRealm = securityRealm;
-    }
+    private transient ConfigurationFactory configurationFactory;
+    private transient RunAsSource runAsSource;
 
     public Subject getDefaultSubject()
     {
-        return defaultSubject;
-    }
-
-    public void setDefaultSubject(Subject defaultSubject)
-    {
-        this.defaultSubject = defaultSubject;
+        return runAsSource.getDefaultSubject();
     }
 
     public String getPolicyContextID()
@@ -77,4 +64,11 @@
         this.runAsSource = runAsSource;
     }
 
+    public ConfigurationFactory getConfigurationFactory() {
+        return configurationFactory;
+    }
+
+    public void setConfigurationFactory(ConfigurationFactory configurationFactory) {
+        this.configurationFactory = configurationFactory;
+    }
 }

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/AbstractWebModuleTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/AbstractWebModuleTest.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/AbstractWebModuleTest.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/AbstractWebModuleTest.java Tue May 26 14:50:40 2009
@@ -59,7 +59,7 @@
  */
 public abstract class AbstractWebModuleTest extends TestSupport {
     
-    protected ClassLoader cl;
+    protected ClassLoader cl = this.getClass().getClassLoader();
     protected final static String securityRealmName = "demo-properties-realm";
     protected ConnectorGBean connector;
     protected TomcatContainer container;
@@ -68,7 +68,7 @@
     private ConnectionTrackingCoordinator connectionTrackingCoordinator;
 
     protected static final String POLICY_CONTEXT_ID = "securetest";
-    private GeronimoLoginConfiguration loginConfiguration;
+    protected GenericSecurityRealm realm;
 
     protected TomcatWebAppContext setUpInsecureAppContext(URI relativeWebAppRoot, URL configurationBaseURL, SecurityHolder securityHolder, RunAsSource runAsSource, ObjectRetriever tomcatRealm, ValveGBean valveChain) throws Exception {
 
@@ -85,6 +85,7 @@
                 connectionTrackingCoordinator,
                 container,
                 runAsSource,
+                securityHolder == null? null: securityHolder.getConfigurationFactory(),
                 tomcatRealm,
                 null,
                 valveChain,
@@ -107,7 +108,7 @@
 
     protected TomcatWebAppContext setUpSecureAppContext(Map roleDesignates, Map principalRoleMap, ComponentPermissions componentPermissions, RealmGBean realm, SecurityHolder securityHolder) throws Exception {
         ApplicationPolicyConfigurationManager jacc = setUpJACC(roleDesignates, principalRoleMap, componentPermissions, POLICY_CONTEXT_ID);
-
+        securityHolder.setConfigurationFactory(this.realm);
         URL configurationBaseURL = new File(BASEDIR, "src/test/resources/deployables/war3/WEB-INF/web.xml").toURL();
         return setUpInsecureAppContext(new File(BASEDIR, "src/test/resources/deployables/war3/").toURI(),
                 configurationBaseURL,
@@ -143,29 +144,23 @@
 
         PrincipalInfo.PrincipalEditor principalEditor = new PrincipalInfo.PrincipalEditor();
         principalEditor.setAsText("metro,org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
-        GenericSecurityRealm realm = new GenericSecurityRealm(domainName, loginModuleUse, true, null, serverInfo,  cl, null);
-
-        loginConfiguration = new GeronimoLoginConfiguration(Collections.<ConfigurationEntryFactory>singleton(realm), true);
-        loginConfiguration.doStart();
-
+        realm = new GenericSecurityRealm(domainName, loginModuleUse, true, true, serverInfo,  cl, null);
     }
 
 
     protected void tearDownSecurity() throws Exception {
-        loginConfiguration.doStop();
     }
 
     protected void init(String realmClass) throws Exception {
-        cl = this.getClass().getClassLoader();
 
         RealmGBean realm = null;
-        if (realmClass != null) {
-            Map initParams = new HashMap();
-            initParams.put("userClassNames", "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
-            initParams.put("roleClassNames", "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
-            realm = new RealmGBean(realmClass, initParams);
-            realm.doStart();
-        }
+//        if (realmClass != null) {
+//            Map initParams = new HashMap();
+//            initParams.put("userClassNames", "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
+//            initParams.put("roleClassNames", "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
+//            realm = new RealmGBean(realmClass, initParams, null, null);
+//            realm.doStart();
+//        }
 
         //Default Host
         Map initParams = new HashMap();
@@ -185,6 +180,7 @@
                 null,
                 null,
                 null,
+                null,
                 null);
         engine.doStart();
 

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/ContainerTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/ContainerTest.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/ContainerTest.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/ContainerTest.java Tue May 26 14:50:40 2009
@@ -62,7 +62,7 @@
 
         String contextPath = "/foo/webservice.ws";
         MockWebServiceContainer webServiceInvoker = new MockWebServiceContainer();
-        container.addWebService(contextPath, null, webServiceInvoker, securityRealmName, securityRealmName, "NONE", "BASIC", null, cl);
+        container.addWebService(contextPath, null, webServiceInvoker, realm, securityRealmName, "NONE", "BASIC", null, cl);
 
         //Veryify its secured
         HttpURLConnection connection = (HttpURLConnection) new URL(connector.getConnectUrl() + contextPath).openConnection();

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JAASSecurityTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JAASSecurityTest.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JAASSecurityTest.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JAASSecurityTest.java Tue May 26 14:50:40 2009
@@ -151,20 +151,21 @@
         initParams.put("userClassNames", "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal");
         initParams.put("roleClassNames", "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal");
 
-        RealmGBean realm = new RealmGBean("org.apache.geronimo.tomcat.realm.TomcatJAASRealm", initParams);
-        realm.doStart();
+//        RealmGBean realm = new RealmGBean("org.apache.geronimo.tomcat.realm.TomcatJAASRealm", initParams);
+//        realm.doStart();
 
         PermissionCollection excludedPermissions = new Permissions();
         PermissionCollection uncheckedPermissions = new Permissions();
         ComponentPermissions componentPermissions = new ComponentPermissions(excludedPermissions, uncheckedPermissions, new HashMap());
         //Force a new realm name and ignore the application name
         SecurityHolder securityHolder = new SecurityHolder();
-        securityHolder.setSecurityRealm(securityRealmName);
+        securityHolder.setSecurity(false);//redundant: forces use of TomcatJAASRealm not TomcatGeronimoRealm
+        securityHolder.setConfigurationFactory(this.realm);
         CredentialStore credentialStore = null;
         setUpSecureAppContext(new HashMap(),
                 new HashMap(),
                 componentPermissions,
-                realm,
+                null,
                 securityHolder
         );
     }
@@ -174,8 +175,8 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        super.init("org.apache.geronimo.tomcat.realm.TomcatJAASRealm");
         setUpSecurityService();
+        super.init(null);
     }
 
     protected void tearDown() throws Exception {

Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JACCSecurityTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JACCSecurityTest.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JACCSecurityTest.java (original)
+++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/JACCSecurityTest.java Tue May 26 14:50:40 2009
@@ -161,8 +161,6 @@
         SecurityHolder securityHolder = new SecurityHolder();
         securityHolder.setSecurity(true);
         securityHolder.setPolicyContextID(POLICY_CONTEXT_ID);
-//        securityHolder.setDefaultSubject(defaultPrincipal);
-        securityHolder.setSecurityRealm(securityRealmName);
         return setUpSecureAppContext(roleDesignates,
                 principalRoleMap,
                 componentPermissions,
@@ -176,7 +174,7 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        super.init("org.apache.geronimo.tomcat.realm.TomcatGeronimoRealm");
+        super.init(null);
     }
 
     protected void tearDown() throws Exception {

Modified: geronimo/server/trunk/plugins/tomcat/tomcat6/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/tomcat6/src/main/plan/plan.xml?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/tomcat/tomcat6/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/tomcat/tomcat6/src/main/plan/plan.xml Tue May 26 14:50:40 2009
@@ -188,6 +188,9 @@
             roleClassNames=org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal
             appName=DefaultJAASRealm
         </attribute>
+        <reference name="ConfigurationFactory">
+            <name>geronimo-admin</name>
+        </reference>
     </gbean>
 
     <!-- Host -->

Modified: geronimo/server/trunk/plugins/webservices/geronimo-webservices/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/webservices/geronimo-webservices/pom.xml?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/webservices/geronimo-webservices/pom.xml (original)
+++ geronimo/server/trunk/plugins/webservices/geronimo-webservices/pom.xml Tue May 26 14:50:40 2009
@@ -58,6 +58,12 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>geronimo-security</artifactId>
+            <version>${version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-jaxrpc_1.1_spec</artifactId>
             <scope>provided</scope>

Modified: geronimo/server/trunk/plugins/webservices/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/SoapHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/webservices/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/SoapHandler.java?rev=778726&r1=778725&r2=778726&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/webservices/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/SoapHandler.java (original)
+++ geronimo/server/trunk/plugins/webservices/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/SoapHandler.java Tue May 26 14:50:40 2009
@@ -16,12 +16,14 @@
  */
 package org.apache.geronimo.webservices;
 
+import org.apache.geronimo.security.jaas.ConfigurationFactory;
+
 /**
  * @version $Rev$ $Date$
  */
 public interface SoapHandler {
 
-    void addWebService(String contextPath, String[] virtualHosts, WebServiceContainer webServiceContainer, String securityRealmName, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) throws Exception;
+    void addWebService(String contextPath, String[] virtualHosts, WebServiceContainer webServiceContainer, ConfigurationFactory configurationFactory, String realmName, String transportGuarantee, String authMethod, String[] protectedMethods, ClassLoader classLoader) throws Exception;
 
     void removeWebService(String contextPath);