[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security/loginmodule ...
Shane Bryzak
Shane_Bryzak at symantec.com
Wed Jul 26 02:04:35 EDT 2006
User: sbryzak2
Date: 06/07/26 02:04:35
Added: src/main/org/jboss/seam/security/loginmodule
SeamLoginModule.java
Log:
ongoing security framework stuff
Revision Changes Path
1.1 date: 2006/07/26 06:04:35; author: sbryzak2; state: Exp;jboss-seam/src/main/org/jboss/seam/security/loginmodule/SeamLoginModule.java
Index: SeamLoginModule.java
===================================================================
package org.jboss.seam.security.loginmodule;
import java.lang.reflect.Method;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.spi.LoginModule;
import org.jboss.seam.Component;
import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.security.config.SecurityConfig;
import org.jboss.seam.security.realm.RolePrincipal;
import org.jboss.seam.security.realm.UserPrincipal;
/**
* A LoginModule that provides authentication against a Seam component.
*
* @author Shane Bryzak
*/
public class SeamLoginModule implements LoginModule
{
private static final String CONFIG_COMPONENT_NAME = "component-name";
private static final String CONFIG_LOGIN_METHOD = "login-method";
private static final String CONFIG_PRINCIPAL_METHOD = "principal-method";
private static final String CONFIG_ROLES_METHOD = "roles-method";
private static final String DEFAULT_COMPONENT_NAME = "loginModule";
private static final String DEFAULT_LOGIN_METHOD = "login";
private static final String DEFAULT_PRINCIPAL_METHOD = "getPrincipal";
private static final String DEFAULT_ROLES_METHOD = "getRoles";
private Subject subject;
private CallbackHandler callbackHandler;
private String componentName;
private String loginMethodName;
private String principalMethodName;
private String rolesMethodName;
private String principal;
private String[] roles;
public boolean abort()
{
principal = null;
roles = null;
return true;
}
public boolean commit()
{
subject.getPrincipals().add(new UserPrincipal(principal));
for (String role : roles)
subject.getPrincipals().add(new RolePrincipal(principal));
return true;
}
public void initialize(Subject subject, CallbackHandler handler,
Map<String,?> sharedState, Map<String,?> options)
{
this.subject = subject;
this.callbackHandler = handler;
componentName = options.containsKey(CONFIG_COMPONENT_NAME) ?
(String) options.get(CONFIG_COMPONENT_NAME) : DEFAULT_COMPONENT_NAME;
loginMethodName = options.containsKey(CONFIG_LOGIN_METHOD) ?
(String) options.get(CONFIG_LOGIN_METHOD) : DEFAULT_LOGIN_METHOD;
principalMethodName = options.containsKey(CONFIG_PRINCIPAL_METHOD) ?
(String) options.get(CONFIG_PRINCIPAL_METHOD) : DEFAULT_PRINCIPAL_METHOD;
rolesMethodName = options.containsKey(CONFIG_ROLES_METHOD) ?
(String) options.get(CONFIG_ROLES_METHOD) : DEFAULT_ROLES_METHOD;
}
public boolean login()
{
try
{
// Lifecycle.setServletContext(SecurityConfig.instance().getServletContext());
// Lifecycle.beginCall();
Object obj = Component.getInstance(componentName, true);
Method loginMethod = obj.getClass().getMethod(loginMethodName, String.class, String.class);
Method principalMethod = obj.getClass().getMethod(principalMethodName);
Method rolesMethod = obj.getClass().getMethod(rolesMethodName);
NameCallback nameCallback = new NameCallback("Username");
PasswordCallback pwCallback = new PasswordCallback("Password", false);
callbackHandler.handle(new Callback[]{nameCallback, pwCallback });
loginMethod.invoke(obj, nameCallback.getName(), new String(pwCallback.getPassword()));
principal = (String) principalMethod.invoke(obj);
roles = (String[]) rolesMethod.invoke(obj);
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
// Lifecycle.endCall();
}
}
public boolean logout()
{
principal = null;
roles = null;
return true;
}
}
More information about the jboss-cvs-commits
mailing list