package org.jboss.webservice.handler;
import org.jboss.axis.AxisFault;
import org.jboss.axis.MessageContext;
import org.jboss.axis.encoding.Base64;
import org.jboss.axis.handlers.BasicHandler;
import org.jboss.logging.Logger;
import org.jboss.security.SecurityAssociation;
import org.jboss.security.SimplePrincipal;
import org.jboss.webservice.Constants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import java.util.Iterator;
public class ServerLoginHandler extends BasicHandler
{
static final long serialVersionUID = 8239981936517243635L;
private static final Logger log = Logger.getLogger(ServerLoginHandler.class);
public void invoke(MessageContext msgContext) throws AxisFault
{
try
{
SOAPMessage soapMessage = msgContext.getMessage();
SOAPHeader soapHeader = soapMessage.getSOAPPart().getEnvelope().getHeader();
Iterator it = soapHeader.extractHeaderElements(Constants.NAMESPACE + "/login");
while (it.hasNext())
{
SOAPHeaderElement element = (SOAPHeaderElement)it.next();
String localName = element.getElementName().getLocalName();
String value = element.getValue();
if (localName.equals("username"))
{
SecurityAssociation.setPrincipal(new SimplePrincipal(value));
}
if (localName.equals("password"))
{
String password = new String(Base64.decode(value));
SecurityAssociation.setCredential(password);
}
}
}
catch (SOAPException e)
{
log.error("Server login failed: " + e.toString());
throw new AxisFault("Server login failed", e);
}
}
}