User: starksm
Date: 02/03/22 19:12:55
Added: src/main/org/jboss/security/auth/login
AuthenticationInfo.java XMLLoginConfig.java
XMLLoginConfigMBean.java
Log:
A concrete implementation of the javax.security.auth.login.Configuration that
uses an xml configuration format.
Revision Changes Path
1.1
jbosssx/src/main/org/jboss/security/auth/login/AuthenticationInfo.java
Index: AuthenticationInfo.java
===================================================================
/*
* JBoss, the OpenSource EJB server
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.security.auth.login;
import javax.security.auth.AuthPermission;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.AppConfigurationEntry;
/** The login module configuration information.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class AuthenticationInfo
{
public static final AuthPermission GET_CONFIG_ENTRY_PERM = new
AuthPermission("getLoginConfiguration");
public static final AuthPermission SET_CONFIG_ENTRY_PERM = new
AuthPermission("setLoginConfiguration");
private AppConfigurationEntry[] loginModules;
private CallbackHandler callbackHandler;
/** Get an application authentication configuration. This requires an
AuthPermission("getLoginConfiguration") access.
*/
public AppConfigurationEntry[] getAppConfigurationEntry()
{
SecurityManager sm = System.getSecurityManager();
if( sm != null )
sm.checkPermission(GET_CONFIG_ENTRY_PERM);
return loginModules;
}
/** Set an application authentication configuration. This requires an
AuthPermission("setLoginConfiguration") access.
*/
public void setAppConfigurationEntry(AppConfigurationEntry[] loginModules)
{
SecurityManager sm = System.getSecurityManager();
if( sm != null )
sm.checkPermission(SET_CONFIG_ENTRY_PERM);
this.loginModules = loginModules;
}
/**
*/
public CallbackHandler getAppCallbackHandler()
{
return callbackHandler;
}
public void setAppCallbackHandler(CallbackHandler handler)
{
this.callbackHandler = handler;
}
}
1.1
jbosssx/src/main/org/jboss/security/auth/login/XMLLoginConfig.java
Index: XMLLoginConfig.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.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import javax.security.auth.AuthPermission;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.EntityResolver;
import org.jboss.logging.Logger;
/** An concrete implementation of the javax.security.auth.login.Configuration
class that parses an xml configuration of the form:
<policy>
<application-policy name = "test-domain">
<authentication>
<login-module code =
"org.jboss.security.plugins.samples.IdentityLoginModule"
flag = "required">
<module-option name = "principal">starksm</module-option>
</login-module>
</authentication>
</application-policy>
</policy>
@see javax.security.auth.login.Configuration
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class XMLLoginConfig extends Configuration
implements XMLLoginConfigMBean
{
private static final String DEFAULT_APP_CONFIG_NAME = "other";
private static final AuthPermission REFRESH_PERM = new
AuthPermission("refreshPolicy");
private static Logger log = Logger.getLogger(XMLLoginConfig.class);
/** A mapping of application name to AppConfigurationEntry[] */
private HashMap appConfigs = new HashMap();
private int state = XMLLoginConfigMBean.STOPPED;
private URL xmlConfig;
private Configuration parentConfig;
public XMLLoginConfig()
{
}
public void refresh()
{
SecurityManager sm = System.getSecurityManager();
if( sm != null )
sm.checkPermission(REFRESH_PERM);
}
public AppConfigurationEntry[] getAppConfigurationEntry(String appName)
{
AppConfigurationEntry[] entry = null;
AuthenticationInfo authInfo = (AuthenticationInfo) appConfigs.get(appName);
if( authInfo != null )
{
entry = authInfo.getAppConfigurationEntry();
}
else
{
if( parentConfig != null )
entry = parentConfig.getAppConfigurationEntry(appName);
if( entry == null )
authInfo = (AuthenticationInfo) appConfigs.get(DEFAULT_APP_CONFIG_NAME);
if( authInfo != null )
entry = authInfo.getAppConfigurationEntry();
}
return entry;
}
public void setConfig(URL xmlConfig)
{
this.xmlConfig = xmlConfig;
}
/** Add an application configuration
*/
public Configuration getConfiguration(Configuration prevConfig)
{
parentConfig = prevConfig;
return this;
}
// Begin ServiceMBean interface methods
/**
* create the service, do expensive operations etc
*/
public void create() throws Exception
{
}
public String getName()
{
return "XMLLoginConfig";
}
public int getState()
{
return state;
}
public String getStateString()
{
return XMLLoginConfigMBean.states[state];
}
/**
* start the service, create is already called
*/
public void start() throws Exception
{
if (getState() != XMLLoginConfigMBean.STOPPED && getState() !=
XMLLoginConfigMBean.FAILED)
return;
state = XMLLoginConfigMBean.STARTING;
loadConfig(xmlConfig);
state = XMLLoginConfigMBean.STARTED;
}
/**
* stop the service
*/
public void stop()
{
state = XMLLoginConfigMBean.STOPPING;
state = XMLLoginConfigMBean.STOPPED;
}
/**
* destroy the service, tear down
*/
public void destroy()
{
}
// End ServiceMBean interface methods
private void loadConfig(URL xmlConfig) throws Exception
{
log.trace("Loading xmlConfig="+xmlConfig);
Document doc = loadURL(xmlConfig);
Element root = doc.getDocumentElement();
NodeList apps = root.getElementsByTagName("application-policy");
for(int n = 0; n < apps.getLength(); n ++)
{
Element appPolicy = (Element) apps.item(n);
String appName = appPolicy.getAttribute("name");
log.trace("Parsing application-policy="+appName);
try
{
AuthenticationInfo authInfo = parseAuthentication(appPolicy);
if( authInfo != null )
appConfigs.put(appName, authInfo);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
private Document loadURL(URL xmlConfig) throws Exception
{
InputStream is = xmlConfig.openStream();
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
EntityResolver resolver = new LocalResolver();
docBuilder.setEntityResolver(resolver);
Document doc = docBuilder.parse(is);
return doc;
}
/** Parse the application-policy/authentication element
@param policy, the application-policy/authentication element
*/
private AuthenticationInfo parseAuthentication(Element policy) throws Exception
{
// Parse the permissions
NodeList authentication = policy.getElementsByTagName("authentication");
if( authentication.getLength() == 0 )
{
return null;
}
Element auth = (Element) authentication.item(0);
NodeList modules = auth.getElementsByTagName("login-module");
ArrayList tmp = new ArrayList();
for(int n = 0; n < modules.getLength(); n ++)
{
Element module = (Element) modules.item(n);
parseModule(module, tmp);
}
AppConfigurationEntry[] entries = new AppConfigurationEntry[tmp.size()];
tmp.toArray(entries);
AuthenticationInfo info = new AuthenticationInfo();
info.setAppConfigurationEntry(entries);
return info;
}
private void parseModule(Element module, ArrayList entries) throws Exception
{
LoginModuleControlFlag controlFlag = LoginModuleControlFlag.OPTIONAL;
String className = module.getAttribute("code");
String flag = module.getAttribute("flag");
if( flag != null )
{
if( flag.equals(LoginModuleControlFlag.REQUIRED.toString()) )
controlFlag = LoginModuleControlFlag.REQUIRED;
else if( flag.equals(LoginModuleControlFlag.REQUISITE.toString()) )
controlFlag = LoginModuleControlFlag.REQUISITE;
else if( flag.equals(LoginModuleControlFlag.SUFFICIENT.toString()) )
controlFlag = LoginModuleControlFlag.SUFFICIENT;
else if( flag.equals(LoginModuleControlFlag.OPTIONAL.toString()) )
controlFlag = LoginModuleControlFlag.OPTIONAL;
}
NodeList opts = module.getElementsByTagName("module-option");
HashMap options = new HashMap();
for(int n = 0; n < opts.getLength(); n ++)
{
Element opt = (Element) opts.item(n);
String name = opt.getAttribute("name");
String value = getContent(opt, "");
options.put(name, value);
}
AppConfigurationEntry entry = new AppConfigurationEntry(className,
controlFlag, options);
entries.add(entry);
}
public static String getContent(Element element, String defaultContent)
{
NodeList children = element.getChildNodes();
String content = defaultContent;
if( children.getLength() > 0 )
{
content = "";
for(int n = 0; n < children.getLength(); n ++)
{
if( children.item(n).getNodeType() == Node.TEXT_NODE ||
children.item(n).getNodeType() == Node.CDATA_SECTION_NODE )
content += children.item(n).getNodeValue();
else
content += children.item(n).getFirstChild();
}
return content.trim();
}
return content;
}
/** Local entity resolver to handle the security-policy DTD public id.
*/
private static class LocalResolver implements EntityResolver
{
private static final String LOGIN_CIONFIG_PUBLIC_ID = "-//JBoss//DTD JAAS
LoginConfig//EN";
private static final String LOGIN_CIONFIG_DTD_NAME = "login-config.dtd";
public InputSource resolveEntity(String publicId, String systemId)
{
InputSource is = null;
if( publicId.equals(LOGIN_CIONFIG_PUBLIC_ID) )
{
try
{
InputStream dtdStream =
getClass().getResourceAsStream(LOGIN_CIONFIG_DTD_NAME);
is = new InputSource(dtdStream);
}
catch(Exception ex )
{
}
}
return is;
}
}
}
1.1
jbosssx/src/main/org/jboss/security/auth/login/XMLLoginConfigMBean.java
Index: XMLLoginConfigMBean.java
===================================================================
package org.jboss.security.auth.login;
import javax.security.auth.login.Configuration;
import org.jboss.system.ServiceMBean;
/**
*
* @author [EMAIL PROTECTED]
*/
public interface XMLLoginConfigMBean extends ServiceMBean
{
/** Add an application configuration
*/
public Configuration getConfiguration(Configuration prevConfig);
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development