You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by Reddy Vemula <ra...@oit.state.nj.us> on 2006/11/21 20:50:52 UTC
User Identity Propagation to Endpoint Component
Hi All
Can somebody help me to find how to propogate the user identity to the
component whose methods are exposed as web service.
I tried to do following way in a custom handler which is placed after
the WSDoAllReceiver of WSS4J handler on the server.
But it results in an Exception as mentioned below. In this handler I
tried to embed the username in one of elements of the Content of SoapBody.
If I remove this handler it does not throw any exception. The WSS4J
Actions I am using are: <parameter name="action" value="UsernameToken
Encrypt"/>
The Exception I am getting is:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}MustUnderstand
faultSubcode:
faultString: Did not understand "MustUnderstand"
header(s):{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:
at
org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:96)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at dexmlws.servlet.DexmlFilter.doFilter(DexmlFilter.java:55)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:265)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:203)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:158)
at com.iplanet.ias.web.WebContainer.service(WebContainer.java:598)
{http://xml.apache.org/axis/}hostname:OIT-DT6
Did not understand "MustUnderstand"
header(s):{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security
at
org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:96)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(Htt
[20/Nov/2006:14:38:26] FINE ( 5788): pServlet.java:760)
at
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at dexmlws.servlet.DexmlFilter.doFilter(DexmlFilter.java:55)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:265)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:203)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:505)
at
com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:158)
at com.iplanet.ias.web.WebContainer.service(WebContainer.java:598)
//////////////////////////
public void processResults(MessageContext msgContext) throws AxisFault {
Vector results = (Vector)
msgContext.getProperty(WSHandlerConstants.RECV_RESULTS);
for (int i = 0; i < results.size(); i++) {
WSHandlerResult hResult = (WSHandlerResult) results.get(i);
Vector hResults = hResult.getResults();
for (int j = 0; j < hResults.size(); j++) {
WSSecurityEngineResult eResult =
(WSSecurityEngineResult) hResults.get(j);
if (eResult.getAction() != WSConstants.ENCR) {
String userName = eResult.getPrincipal().getName();
embedUserNameInSoapRequest(msgContext, userName);
}
}
}
}
///////////////////
private void embedUserNameInSoapRequest(MessageContext msgContext,
String userName) {
try {
String methodName = "processResults()";
Message sm = msgContext.getCurrentMessage();
Document doc = sm.getSOAPEnvelope().getAsDocument();
Element docElement = doc.getDocumentElement();
NodeList docElementChildNodes = docElement.getChildNodes();
for (int i = 0; i < docElementChildNodes.getLength(); i++) {
Node childToSoapEnv = docElementChildNodes.item(i);
if (childToSoapEnv != null &&
childToSoapEnv.getLocalName() != null &&
childToSoapEnv.getLocalName().equals("Body")) {
NodeList bodyElementChildNodes =
childToSoapEnv.getChildNodes();
for (int a = 0; a <
bodyElementChildNodes.getLength(); a++) {
Node aNode = bodyElementChildNodes.item(a);
if (aNode.hasAttributes()) {
NamedNodeMap attributes = aNode.getAttributes();
for (int b = 0; b < attributes.getLength();
b++) {
Node attriNode = attributes.item(b);
if
(attriNode.getNodeValue().indexOf("DexmlDocumentVO") != -1) {
NodeList ddVOnl = aNode.getChildNodes();
for (int c = 0; c <
ddVOnl.getLength(); c++) {
Node dtNode = ddVOnl.item(c);
if
(dtNode.getLocalName().equals("documentType")) {
NodeList textNodes =
dtNode.getChildNodes();
for (int d = 0; d <
textNodes.getLength(); d++) {
Node text =
textNodes.item(d);
if (text.getNodeType()
== Node.TEXT_NODE) {
String textValue =
text.getNodeValue();
if (textValue !=
null && textValue.trim().length() > 0) {
text.setNodeValue(userName + "" + textValue.trim());
}
}
}
}
}
}
}
}
}
}
}
SOAPPart sPart = (org.apache.axis.SOAPPart) sm.getSOAPPart();
ByteArrayOutputStream os = new ByteArrayOutputStream();
XMLUtils.outputDOM(doc, os, false);//false addPreamble
sPart.setCurrentMessage(os.toByteArray(), SOAPPart.FORM_BYTES);
}
catch (Exception e) {
e.printStackTrace();
}
}
Thanks
Reddy