| DynamicLoginConfig.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.security.auth.login;
import java.net.URL;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.system.ServiceMBeanSupport;
import org.jboss.deployment.DeploymentException;
/** A security config mbean that loads an xml login configuration using the
XMLLoginConfig.loadConfig(URL config) operation on start, and unloads
the contained login module configurations on stop.
<server>
<mbean code="org.jboss.security.auth.login.DynamicLoginConfig"
name="...">
<attribute name="AuthConfig">login-config.xml</attribute>
<!-- The service which supports dynamic processing of login-config.xml
configurations.
-->
<depends optional-attribute-name="LoginConfigService">
jboss.security:service=XMLLoginConfig
</depends>
<!-- Optionally specify the security mgr service to use when
this service is stopped to flush the auth caches of the domains
registered by this service.
-->
<depends optional-attribute-name="SecurityManagerService">
jboss.security:service=JaasSecurityManager
</depends>
</mbean>
</server>
@see org.jboss.security.auth.login.XMLLoginConfig
@author Scott.Stark@jboss.org
@version $Revision: 1.4 $
*/
public class DynamicLoginConfig extends ServiceMBeanSupport
implements DynamicLoginConfigMBean
{
/** The JAAS login config file resource to load */
private String authConf = "login-config.xml";
/** The name of the XMLLoginConfig to use to load the login configs */
private ObjectName loginConfigService;
/** The name of the SecurityMgrService to use for cache flushes */
private ObjectName securityMgrService;
/** The names of the login module configs loaded during start */
private String[] configNames;
public DynamicLoginConfig()
{
}
public String getName()
{
return "Dynamic JAAS Login Config";
}
public ObjectName getLoginConfigService()
{
return loginConfigService;
}
/** Get the XMLLoginConfig service to use for loading. This service must
* support a String[] loadConfig(URL) operation to load the configurations.
*
* @param serviceName - the XMLLoginConfig service name.
*/
public void setLoginConfigService(ObjectName serviceName)
{
this.loginConfigService = serviceName;
}
public ObjectName getSecurityManagerService()
{
return securityMgrService;
}
/** Set the SecurityManagerService used to flush the registered security
* domains. This service must support an flushAuthenticationCache(String)
* operation to flush the case for the argument security domain. Setting
* this triggers the flush of the authentication caches when the service
* is stopped.
* @param serviceName - the SecurityManagerService service name.
*/
public void setSecurityManagerService(ObjectName serviceName)
{
this.securityMgrService = serviceName;
}
/** Get the resource path to the JAAS login configuration file to use.
*/
public String getAuthConfig()
{
return authConf;
}
/** Set the resource path to the JAAS login configuration file to use.
The default is "login-config.xml".
*/
public void setAuthConfig(String authConf)
{
this.authConf = authConf;
}
/** Go through the registered login config names and flush the auth
* caches if there is a registered SecurityManagerService.
*
* @throws Exception
*/
public void flushAuthenticationCaches() throws Exception
{
if( this.securityMgrService != null && server.isRegistered(securityMgrService))
{
int count = configNames == null ? 0 : configNames.length;
String[] sig = {String.class.getName()};
for(int n = 0; n < count; n ++)
{
Object[] args = {configNames[n]};
server.invoke(securityMgrService, "flushAuthenticationCache", args, sig);
log.debug("Flushed domain: "+configNames[n]);
}
}
}
/** Start the service. This entails loading the AuthConf file contents
* using the LoginConfigService.
*/
protected void startService() throws Exception
{
// Look for the authConf as resource
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL loginConfig = loader.getResource(authConf);
if( loginConfig != null )
{
log.debug("Using JAAS AuthConfig: "+loginConfig.toExternalForm());
MBeanServer server = super.getServer();
Object[] args = {loginConfig};
String[] sig = {URL.class.getName()};
configNames = (String[]) server.invoke(loginConfigService,
"loadConfig", args, sig);
int count = configNames == null ? 0 : configNames.length;
for(int n = 0; n < count; n ++)
{
log.debug("Loaded config: "+configNames[n]);
}
}
else
{
throw new DeploymentException("Failed to find authConf as resource: "+authConf);
}
}
/** Start the service. This entails unloading the AuthConf file contents
* using the LoginConfigService.
*/
protected void stopService() throws Exception
{
MBeanServer server = super.getServer();
flushAuthenticationCaches();
if( configNames != null && configNames.length > 0 )
{
Object[] args = {configNames};
String[] sig = {configNames.getClass().getName()};
server.invoke(loginConfigService, "removeConfigs", args, sig);
}
}
}
| DynamicLoginConfig.java |