[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