[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security/realm ...
Shane Bryzak
Shane_Bryzak at symantec.com
Mon Jul 24 03:13:40 EDT 2006
User: sbryzak2
Date: 06/07/24 03:13:40
Added: src/main/org/jboss/seam/security/realm CatalinaRealm.java
Realm.java SeamRealm.java
Log:
Work in progress, do not use!
Revision Changes Path
1.1 date: 2006/07/24 07:13:39; author: sbryzak2; state: Exp;jboss-seam/src/main/org/jboss/seam/security/realm/CatalinaRealm.java
Index: CatalinaRealm.java
===================================================================
package org.jboss.seam.security.realm;
import java.lang.reflect.Method;
import java.security.Principal;
/**
* Wrapper for Tomcat realm authentication
*
* @author Shane Bryzak
*/
public class CatalinaRealm implements Realm
{
private Object realm;
private Method authenticateMethod1; // authenticate(String, String)
private Method authenticateMethod2; // authenticate(String, byte[])
/**
* Constructor - does some reflection gymnastics to find the Tomcat realm.
* This is so we don't have a dependency on the catalina libs.
*/
public CatalinaRealm(String localContext)
{
try
{
// First get the Server object
Class serverFactoryClass = Class.forName("org.apache.catalina.ServerFactory");
Method getServerMethod = serverFactoryClass.getMethod("getServer");
Object server = getServerMethod.invoke(null);
// Now try to find the service
Method findServiceMethod = server.getClass().getMethod("findService", String.class);
Object service = findServiceMethod.invoke(server, "Catalina");
// Are we running under jboss-web ?
if (service == null)
service = findServiceMethod.invoke(server, "jboss.web");
// Ok, as a last resort take the first service we find...
if (service == null)
{
Method findServicesMethod = server.getClass().getMethod("findServices");
Object[] services = (Object[]) findServicesMethod.invoke(server);
if (services.length > 0)
service = services[0];
else
throw new RuntimeException("Cannot find Tomcat service");
}
// Now get the Engine...
Method getContainerMethod = service.getClass().getMethod("getContainer");
Object engine = getContainerMethod.invoke(service);
// Then the Host...
Method getDefaultHostMethod = engine.getClass().getMethod("getDefaultHost");
Method engineFindChildMethod = engine.getClass().getMethod("findChild", String.class);
Object defaultHost = getDefaultHostMethod.invoke(engine);
Object host = engineFindChildMethod.invoke(engine, defaultHost);
// Then the Context...
Method hostFindChildMethod = host.getClass().getMethod("findChild", String.class);
Object context = hostFindChildMethod.invoke(host, localContext);
// We can now get the realm... phew
Method getRealmMethod = context.getClass().getMethod("getRealm");
realm = getRealmMethod.invoke(context);
authenticateMethod1 = realm.getClass().getMethod("authenticate", String.class, String.class);
authenticateMethod2 = realm.getClass().getMethod("authenticate", String.class, byte[].class);
}
catch (ClassNotFoundException ex)
{
/** @todo log error and throw exception */
ex.printStackTrace();
}
catch (Exception ex)
{
/** @todo log error and throw exception */
ex.printStackTrace();
}
}
/**
* Authenticate the user using their username and credentials
*
* @param username String
* @param credentials String
* @return Principal
*/
public Principal authenticate(String username, String credentials)
{
try
{
return (Principal) authenticateMethod1.invoke(realm, username, credentials);
}
catch (Exception ex)
{
/** @todo Log the error and work out what to do here (throw an exception??) */
return null;
}
}
/**
* Authenticate the user using their username and credentials
*
* @param username String
* @param credentials byte[]
* @return Principal
*/
public Principal authenticate(String username, byte[] credentials)
{
try
{
return (Principal) authenticateMethod2.invoke(realm, username, credentials);
}
catch (Exception ex)
{
/** @todo Log the error and work out what to do here (throw an exception??) */
return null;
}
}
}
1.1 date: 2006/07/24 07:13:39; author: sbryzak2; state: Exp;jboss-seam/src/main/org/jboss/seam/security/realm/Realm.java
Index: Realm.java
===================================================================
package org.jboss.seam.security.realm;
import java.security.Principal;
/**
* Realm interface
*
* @author Shane Bryzak
*/
public interface Realm
{
Principal authenticate(String username, String credentials);
Principal authenticate(String username, byte[] credentials);
}
1.1 date: 2006/07/24 07:13:39; author: sbryzak2; state: Exp;jboss-seam/src/main/org/jboss/seam/security/realm/SeamRealm.java
Index: SeamRealm.java
===================================================================
package org.jboss.seam.security.realm;
import java.security.Principal;
/**
* Allows authentication against a Seam component
*
* @author Shane Bryzak
*/
public class SeamRealm implements Realm
{
public Principal authenticate(String username, String credentials)
{
return null;
}
public Principal authenticate(String username, byte[] credentials)
{
return null;
}
}
More information about the jboss-cvs-commits
mailing list