[Jboss-cvs] JBossAS SVN: r56406 - in trunk: security/src/main/org/jboss/security security/src/main/org/jboss/security/auth/login security/src/main/org/jboss/security/authorization security/src/main/org/jboss/security/config security/src/main/org/jboss/security/plugins server/src/etc/conf/default

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 29 12:01:57 EDT 2006


Author: anil.saldhana at jboss.com
Date: 2006-08-29 12:01:54 -0400 (Tue, 29 Aug 2006)
New Revision: 56406

Added:
   trunk/security/src/main/org/jboss/security/config/SecurityConfiguration.java
Modified:
   trunk/security/src/main/org/jboss/security/SecurityContext.java
   trunk/security/src/main/org/jboss/security/Util.java
   trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfig.java
   trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfigImpl.java
   trunk/security/src/main/org/jboss/security/authorization/AuthorizationContext.java
   trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerService.java
   trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerServiceMBean.java
   trunk/security/src/main/org/jboss/security/plugins/JBossAuthorizationManager.java
   trunk/server/src/etc/conf/default/jboss-service.xml
Log:
Use SecurityConfiguration to derive the application policies

Modified: trunk/security/src/main/org/jboss/security/SecurityContext.java
===================================================================
--- trunk/security/src/main/org/jboss/security/SecurityContext.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/SecurityContext.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -13,9 +13,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.jboss.logging.Logger;
-import org.jboss.mx.util.MBeanServerLocator;
-import org.jboss.security.auth.login.XMLLoginConfigMBean;
+import org.jboss.logging.Logger; 
 import org.jboss.security.config.ApplicationPolicy;
 import org.jboss.security.config.MappingInfo;
 import org.jboss.security.mapping.MappingContext;
@@ -83,11 +81,11 @@
       }
       rolesMap.put(securityDomain, grp);
       
-      //Apply Mapping Logic 
-      ApplicationPolicy aPolicy = Util.getApplicationPolicy(securityDomain, 
-            XMLLoginConfigMBean.OBJECT_NAME, 
-            MBeanServerLocator.locateJBoss());
-      
+      //Apply Mapping Logic  
+      ApplicationPolicy aPolicy = Util.getApplicationPolicy(securityDomain);
+      if(aPolicy == null)
+         throw new IllegalStateException("Application Policy could not be obtained "
+               + " for domain:" + securityDomain);
       MappingInfo rmi = aPolicy.getRoleMappingInfo();
       if(rmi != null)
       {

Modified: trunk/security/src/main/org/jboss/security/Util.java
===================================================================
--- trunk/security/src/main/org/jboss/security/Util.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/Util.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -29,20 +29,14 @@
 import java.security.GeneralSecurityException;
 import java.security.KeyException;
 import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.Principal;
+import java.security.NoSuchAlgorithmException; 
 import java.security.Provider;
 import java.security.Security;
 import java.security.SecureRandom;
-import java.security.acl.Group;
-import java.util.Enumeration;
+import java.security.acl.Group; 
 import java.util.Iterator;
 import java.util.Random;
-import java.util.Set;
-
-import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
+import java.util.Set; 
 import javax.naming.InitialContext;
 import javax.security.auth.Subject;
 
@@ -50,6 +44,7 @@
 import org.jboss.crypto.digest.DigestCallback;
 import org.jboss.logging.Logger;
 import org.jboss.security.config.ApplicationPolicy;
+import org.jboss.security.config.SecurityConfiguration;
 
 /** Various security related utilities like MessageDigest
  factories, SecureRandom access, password hashing.
@@ -649,28 +644,13 @@
    /**
     * Obtain the Application Policy
     * 
-    * @param domainName Security Domain 
-    * @param mbeanServer MBeanServer
+    * @param domainName Security Domain  
     * @return
-    */
-   public static ApplicationPolicy getApplicationPolicy(String domainName, 
-         ObjectName oname, MBeanServer mbeanServer)
+    */ 
+   public static ApplicationPolicy getApplicationPolicy(String domainName)
    {
-      ApplicationPolicy aPolicy = null;
-      try
-      {
-         aPolicy = (ApplicationPolicy)mbeanServer.invoke(oname,
-               "getApplicationPolicy", 
-               new Object[]{domainName},
-               new String[]{"java.lang.String"});
-      }
-      catch (JMException jme)
-      { 
-         throw new IllegalStateException("Cannot obtain Application Policy::" + 
-                         jme.getLocalizedMessage());
-      } 
-      return aPolicy;
-   } 
+     return SecurityConfiguration.getApplicationPolicy(domainName); 
+   }
    
    /**
     * Do a JNDI lookup to obtain the authorization manager

Modified: trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfig.java
===================================================================
--- trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfig.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfig.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -20,8 +20,7 @@
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
 package org.jboss.security.auth.login;
-
-import java.util.HashMap;
+ 
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -30,12 +29,13 @@
 import javax.security.auth.login.Configuration;
 import javax.security.auth.login.AppConfigurationEntry;
 
-import org.jboss.security.config.ApplicationPolicy;
+import org.jboss.security.config.ApplicationPolicy; 
 import org.jboss.system.ServiceMBeanSupport;
 
 /** An MBean for managing a XMLLoginConfigImpl instance.
 
  @author Scott.Stark at jboss.org
+ @author Anil.Saldhana at jboss.org
  @version $Revision$
  */
 public class XMLLoginConfig extends ServiceMBeanSupport
@@ -92,7 +92,7 @@
     */
    public void addApplicationPolicy(String appName, ApplicationPolicy aPolicy)
    {
-      config.addApplicationPolicy(appName,aPolicy);
+      config.addApplicationPolicy(appName,aPolicy); 
    }
    
    /** Add an application login configuration. Any existing configuration for

Modified: trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfigImpl.java
===================================================================
--- trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfigImpl.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/auth/login/XMLLoginConfigImpl.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -41,6 +41,7 @@
 import org.jboss.security.config.ApplicationPolicy;
 import org.jboss.security.config.ApplicationPolicyRegistration;
 import org.jboss.security.config.PolicyConfig;
+import org.jboss.security.config.SecurityConfiguration;
 import org.jboss.xb.binding.JBossXBException;
 import org.jboss.xb.binding.Unmarshaller;
 import org.jboss.xb.binding.UnmarshallerFactory;
@@ -62,6 +63,7 @@
  @see javax.security.auth.login.Configuration
 
  @author Scott.Stark at jboss.org
+ @author Anil.Saldhana at jboss.org
  @version $Revision$
  */
 public class XMLLoginConfigImpl extends Configuration implements Serializable, ApplicationPolicyRegistration
@@ -203,6 +205,7 @@
       if (sm != null)
          sm.checkPermission(REFRESH_PERM); 
       appConfigs.add(aPolicy);
+      SecurityConfiguration.addApplicationPolicy(aPolicy.getName(), aPolicy);
    }
 
    /** Add an application configuration
@@ -218,6 +221,7 @@
          log.trace("addAppConfig("+appName+"), authInfo=" + authInfo); 
       ApplicationPolicy aPolicy = new ApplicationPolicy(appName, authInfo);
       appConfigs.add(aPolicy);
+      SecurityConfiguration.addApplicationPolicy(aPolicy.getName(), aPolicy);
    }
 
    /**
@@ -243,7 +247,10 @@
    {
       if(appConfigs == null || appConfigs.size() == 0)
          loadConfig();
-      return (ApplicationPolicy)appConfigs.get(domainName); 
+      ApplicationPolicy aPolicy = (ApplicationPolicy)appConfigs.get(domainName);
+      if(aPolicy != null)
+         SecurityConfiguration.addApplicationPolicy(aPolicy.getName(), aPolicy);
+      return aPolicy;
    } 
 
    

Modified: trunk/security/src/main/org/jboss/security/authorization/AuthorizationContext.java
===================================================================
--- trunk/security/src/main/org/jboss/security/authorization/AuthorizationContext.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/authorization/AuthorizationContext.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -26,16 +26,11 @@
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Map;
-
-import javax.management.JMException; 
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
+import java.util.Map; 
 import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler; 
 
-import org.jboss.logging.Logger;
-import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.logging.Logger; 
 import org.jboss.security.SecurityConstants;
 import org.jboss.security.Util;
 import org.jboss.security.authorization.config.AuthorizationModuleEntry;
@@ -54,7 +49,7 @@
  *  The AuthorizationContext derives the AuthorizationInfo(configuration for the modules)
  *  in the following way:
  *  a) If there has been an injection of ApplicationPolicy, then it will be used.
- *  b) If there has been an injection of Security Config Service, then it will be used.
+ *  b) Util.getApplicationPolicy will be used(which relies on SecurityConfiguration static class).
  *  c) Flag an error that there is no available Application Policy
  *  
  *  @author <a href="mailto:Anil.Saldhana at jboss.org">Anil Saldhana</a>
@@ -70,9 +65,7 @@
    private CallbackHandler callbackHandler = null;
    private Subject authenticatedSubject = null;
    private Map sharedState = new HashMap();
-   
-   //A security config service can be injected
-   private ObjectName securityConfigService = null;
+    
    //Application Policy can be injected
    private ApplicationPolicy applicationPolicy = null;
    
@@ -117,23 +110,9 @@
                + " does not match required domain name=" + this.securityDomainName); 
       this.applicationPolicy = aPolicy; 
    }
+    
    
    /**
-    * Set the Object Name of the MBean Service that provides the 
-    * Application Policy
-    * The MBean service should have a method of the form
-    * public ApplicationPolicy getApplicationPolicy(String name)
-    * 
-    * @param mbeanService
-    */
-   public void setSecurityConfigService(ObjectName mbeanService)
-   {
-      if(mbeanService == null)
-         throw new IllegalArgumentException("SecurityConfigService is null");
-      this.securityConfigService = mbeanService;
-   } 
-   
-   /**
     * Authorize the Resource
     * @param resource
     * @return AuthorizationContext.PERMIT or AuthorizationContext.DENY
@@ -165,9 +144,7 @@
       {
          Exception exc = e.getException();
          if(trace)
-           log.trace("Error in authorize:", exc);
-         else
-           log.error("Error in authorize:"+exc.getLocalizedMessage());
+           log.trace("Error in authorize:", exc); 
          invokeAbort();
          throw ((AuthorizationException)exc);
       }
@@ -175,12 +152,7 @@
    } 
    
    
-   //Private Methods
-   private MBeanServer getMBeanServer()
-   {
-      return MBeanServerLocator.locateJBoss();
-   } 
-
+   //Private Methods  
    private void initializeModules(Resource resource)
    { 
       AuthorizationInfo authzInfo = getAuthorizationInfo(securityDomainName, resource);
@@ -324,27 +296,19 @@
       //Check if an instance of ApplicationPolicy is available 
       if(this.applicationPolicy != null)
          return applicationPolicy.getAuthorizationInfo();
+       
+      ApplicationPolicy aPolicy = Util.getApplicationPolicy(domainName); 
       
-      //Fall back on the MBeanServer
-      MBeanServer mbeanServer = getMBeanServer();
-      if(mbeanServer == null)
-         throw new IllegalStateException("MBean Server not located");
-      if(this.securityConfigService == null)
-         throw new IllegalStateException("Security Config Service not injected");
-      ApplicationPolicy aPolicy = Util.getApplicationPolicy(domainName, 
-            this.securityConfigService, mbeanServer);  
       if(aPolicy == null)
       {
          if(trace)
             log.trace("Application Policy not obtained for domain="+ domainName +
                          ". Trying to obtain the App policy for the default domain of the layer:");
          if(Resource.EJB.equals(layer))
-            aPolicy = Util.getApplicationPolicy(SecurityConstants.DEFAULT_EJB_APPLICATION_POLICY,
-                  this.securityConfigService,mbeanServer);
+            aPolicy = Util.getApplicationPolicy(SecurityConstants.DEFAULT_EJB_APPLICATION_POLICY); 
          else
             if(Resource.WEB.equals(layer))
-               aPolicy = Util.getApplicationPolicy(SecurityConstants.DEFAULT_WEB_APPLICATION_POLICY,
-                     this.securityConfigService, mbeanServer);
+               aPolicy = Util.getApplicationPolicy(SecurityConstants.DEFAULT_WEB_APPLICATION_POLICY); 
       }
       if(aPolicy == null)
          throw new IllegalStateException("Application Policy is null for domain:"+ domainName);

Added: trunk/security/src/main/org/jboss/security/config/SecurityConfiguration.java
===================================================================
--- trunk/security/src/main/org/jboss/security/config/SecurityConfiguration.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/config/SecurityConfiguration.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */ 
+package org.jboss.security.config;
+
+import java.util.HashMap; 
+
+/**
+ *  Class that provides the Configuration for authentication,
+ *  authorization, mapping info etc
+ *  @author <a href="mailto:Anil.Saldhana at jboss.org">Anil Saldhana</a>
+ *  @version $Revision$
+ *  @since  Aug 28, 2006
+ */
+public class SecurityConfiguration
+{
+   /**
+    * Map of Application Policies keyed in by name
+    */
+   private static HashMap appPolicies = new HashMap();
+   
+   public static void addApplicationPolicy(String policyName, ApplicationPolicy aP)
+   {
+      if(policyName == null)
+         throw new IllegalArgumentException("policyName is null");
+      if(aP == null)
+         throw new IllegalArgumentException("application policy is null");
+      appPolicies.put(policyName, aP);
+   }
+   
+   public static ApplicationPolicy getApplicationPolicy(String policyName)
+   {
+      return (ApplicationPolicy)appPolicies.get(policyName);
+   } 
+}

Modified: trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerService.java
===================================================================
--- trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerService.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerService.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -26,8 +26,7 @@
 import java.security.Principal;
 import java.util.Hashtable;
 import java.util.Set; 
- 
-import javax.management.ObjectName;
+  
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -69,15 +68,8 @@
    
    /** The JAAS CallbackHandler interface implementation to use */
    private static String callbackHandlerClassName = "org.jboss.security.auth.callback.SecurityAssociationHandler";
-   private static Class callbackHandlerClass = SecurityAssociationHandler.class;
+   private static Class callbackHandlerClass = SecurityAssociationHandler.class;  
 
-   private static ObjectName securityConfigService = null;
-   
-   public ObjectName getSecurityConfigService()
-   {
-      return securityConfigService;
-   }
-
    /**
     * @see AuthorizationManagerServiceMBean#setAuthorizationManagerClassName(String)
     */
@@ -100,15 +92,7 @@
       callbackHandlerClassName = className;
       ClassLoader loader = Thread.currentThread().getContextClassLoader();
       callbackHandlerClass = loader.loadClass(callbackHandlerClassName);
-   }
-   
-   /**
-    * @see AuthorizationManagerServiceMBean#setSecurityConfigService(ObjectName)
-    */
-   public void setSecurityConfigService(ObjectName configService)
-   {  
-      this.securityConfigService = configService; 
-   }
+   } 
 
    /**
     * @see AuthorizationManagerServiceMBean#getAuthorizationManagerClassName()
@@ -230,9 +214,7 @@
          cachePolicy.create();
          cachePolicy.start(); 
          // See if the security mgr supports an externalized cache policy
-         setSecurityDomainCache(securityMgr, cachePolicy);
-         //Also set the SecurityConfig Service
-         setSecurityConfigService(securityMgr);
+         setSecurityDomainCache(securityMgr, cachePolicy); 
       }
       catch(Exception e2)
       {
@@ -261,29 +243,8 @@
       }
       catch(Exception e2)
       {   // No cache policy support, this is ok
-         log.debug("setCachePolicy failed", e2);
+         if(log.isTraceEnabled())
+            log.trace("setCachePolicy failed", e2);
       }
-   }
-   
-   /**
-    * Use reflection to attempt to set the Security Config Service on the Authorization Manager
-    * @param securityMgr the Authorization Manager
-    */
-   private static void setSecurityConfigService(AuthorizationManager securityMgr)
-   {
-      try
-      {
-         Class[] setSecurityConfigServiceTypes = {ObjectName.class};
-         Method m = authorizationMgrClass.getMethod("setSecurityConfigService", 
-               setSecurityConfigServiceTypes);
-         Object[] setSecurityConfigServiceArgs = {securityConfigService};
-         m.invoke(securityMgr, setSecurityConfigServiceArgs);
-         log.debug("setSecurityConfigServiceArgs, c="+setSecurityConfigServiceArgs[0]);
-      }
-      catch(Exception e2)
-      {    
-         log.debug("setSecurityConfigService failed", e2);
-      }
-   }
-
+   }  
 }

Modified: trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerServiceMBean.java
===================================================================
--- trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerServiceMBean.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/plugins/AuthorizationManagerServiceMBean.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -50,16 +50,9 @@
     * org.jboss.security.AuthorizationManager interface.
     */
    void setAuthorizationManagerClassName(String className)
-      throws ClassNotFoundException, ClassCastException;
+      throws ClassNotFoundException, ClassCastException; 
    
    /**
-    * Set the Security Config Service that is used to obtain the 
-    * AuthorizationInfo
-    * @param configService
-    */
-   void setSecurityConfigService(ObjectName configService);
-   
-   /**
     * 
     * Get the name of the class that provides the authorization manager implementation.
     * 

Modified: trunk/security/src/main/org/jboss/security/plugins/JBossAuthorizationManager.java
===================================================================
--- trunk/security/src/main/org/jboss/security/plugins/JBossAuthorizationManager.java	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/security/src/main/org/jboss/security/plugins/JBossAuthorizationManager.java	2006-08-29 16:01:54 UTC (rev 56406)
@@ -31,8 +31,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-
-import javax.management.ObjectName;
+ 
 import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.jacc.PolicyContext;
@@ -185,10 +184,8 @@
    
    private String securityDomain; 
    
-   private Map contextIdToPolicy = new HashMap();
+   private Map contextIdToPolicy = new HashMap(); 
    
-   private ObjectName securityConfigService = null;
-   
    private static Logger log = Logger.getLogger(JBossAuthorizationManager.class);
    
    protected boolean trace = log.isTraceEnabled();
@@ -217,8 +214,7 @@
          log.error("Error obtaining AuthenticatedSubject:",e);
       }
       AuthorizationContext ac = new AuthorizationContext(this.securityDomain,subject,
-            this.callbackHandler );
-      ac.setSecurityConfigService(this.securityConfigService);
+            this.callbackHandler ); 
       return ac.authorize(resource);
    }  
    
@@ -340,16 +336,8 @@
    {
       this.domainCache = domainCache;
       log.debug("CachePolicy set to: "+domainCache);
-   }
+   } 
    
-   /**
-    * @see AuthorizationManagerServiceMBean#setSecurityConfigService(ObjectName)
-    */
-   public void setSecurityConfigService(ObjectName oname)
-   {
-      this.securityConfigService = oname;
-   }
-   
    /** An accessor method that synchronizes access on the domainCache
     to avoid a race condition that can occur when the cache entry expires
     in the presence of multi-threaded access. The allowRefresh flag should
@@ -605,7 +593,7 @@
     * @param source
     * @param toCopy
     */
-   public Group copyGroups(Group source, Group toCopy)
+   private Group copyGroups(Group source, Group toCopy)
    {
       if(toCopy == null)
          return source;

Modified: trunk/server/src/etc/conf/default/jboss-service.xml
===================================================================
--- trunk/server/src/etc/conf/default/jboss-service.xml	2006-08-29 15:37:13 UTC (rev 56405)
+++ trunk/server/src/etc/conf/default/jboss-service.xml	2006-08-29 16:01:54 UTC (rev 56406)
@@ -298,7 +298,6 @@
    <mbean code="org.jboss.security.plugins.AuthorizationManagerService"
       name="jboss.security:service=AuthorizationManager"> 
       <attribute name="AuthorizationManagerClassName">org.jboss.security.plugins.JBossAuthorizationManager</attribute>
-      <attribute name="SecurityConfigService">jboss.security:service=XMLLoginConfig</attribute>
    </mbean>
 
    <!-- ==================================================================== -->




More information about the jboss-cvs-commits mailing list