package org.jboss.security.auth.spi;
import java.util.Map;
import java.util.HashSet;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.spi.LoginModule;
import org.jboss.security.SecurityAssociation;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.RunAsIdentity;
public class RunAsLoginModule implements LoginModule
{
private String roleName;
private String principalName;
private boolean pushedRole;
public void initialize(Subject subject, CallbackHandler handler,
Map sharedState, Map options)
{
roleName = (String) options.get("roleName");
if( roleName == null )
roleName = "nobody";
principalName = (String) options.get("principalName");
if( principalName == null )
principalName = "nobody";
}
public boolean login()
{
RunAsIdentity runAsRole = new RunAsIdentity(roleName, principalName);
SecurityAssociation.pushRunAsIdentity(runAsRole);
pushedRole = true;
return true;
}
public boolean commit()
{
return abort();
}
public boolean abort()
{
if( pushedRole == false )
return false;
SecurityAssociation.popRunAsIdentity();
return true;
}
public boolean logout()
{
return true;
}
}