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 &quot;MustUnderstand&quot; 
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