जो मूल HTTP प्रमाणीकरण के लिए उपयोगकर्ता नाम और पासवर्ड सेट करेगा। यदि आपने सोपूआई में इसका परीक्षण किया है, तो मैं अनुरोध करता हूं कि आप 'पासवर्ड टेक्स्ट' मूल्य का अनुमान लगा रहे हैं, अनुरोध विवरण फलक में 'WSS-password Type' है। यह WSS सुरक्षा सेट करता है, HTTP सुरक्षा नहीं।
जावा 6 में जेएक्स-डब्ल्यूएस के साथ आपको एसओएपी हेडर में WSS-Usertoken इंजेक्ट करने के लिए एक SOAPHandler संलग्न करने की आवश्यकता है। इस दौर के बारे में बहुत सारे बिट्स और बॉब्स हैं, लेकिन मुझे पोस्ट करने के लिए एक सिंगल लिंक नहीं मिला, इसलिए आपको जाने के लिए यहां कुछ कोड है ...
एक हैंडलर जोड़ने के लिए आपको कुछ चाहिए:
final Binding binding = ((BindingProvider) servicePort).getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null)
handlerList = new ArrayList<Handler>();
handlerList.add(new SecurityHandler());
binding.setHandlerChain(handlerList); // <- important!
फिर सुरक्षाहैंडलर वर्ग कार्य करेगा। हैंडलर सामान्य चीजें हैं और सफल संदेशों और दोषों के लिए बुलाए जाते हैं, लेकिन शायद अधिक महत्वपूर्ण बात यह है कि उन्हें संदेश दिशानिर्देशों - आउटगोइंग अनुरोध के लिए और फिर आने वाली प्रतिक्रिया के लिए कहा जाता है। आप केवल आउटगोइंग संदेशों को संभालना चाहते हैं। तो अगर आप की तरह कुछ की आवश्यकता होगी: यहाँ कुछ मान्यताओं
public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {
...
@Override
public boolean handleMessage(final SOAPMessageContext msgCtx) {
// Indicator telling us which direction this message is going in
final Boolean outInd = (Boolean) msgCtx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// Handler must only add security headers to outbound messages
if (outInd.booleanValue()) {
try {
// Get the SOAP Envelope
final SOAPEnvelope envelope = msgCtx.getMessage().getSOAPPart().getEnvelope();
// Header may or may not exist yet
SOAPHeader header = envelope.getHeader();
if (header == null)
header = envelope.addHeader();
// Add WSS Usertoken Element Tree
final SOAPElement security = header.addChildElement("Security", "wsse",
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
final SOAPElement userToken = security.addChildElement("UsernameToken", "wsse");
userToken.addChildElement("Username", "wsse").addTextNode("MyWSSUsername");
userToken.addChildElement("Password", "wsse").addTextNode("MyWSSPassword");
} catch (final Exception e) {
LOG.error(e);
return false;
}
}
return true;
}
...
// Other required methods on interface need no guts
}
मैं कर दिया है, लेकिन उम्मीद है कि यह आप के लिए जा रहा हो जाएगा!
दयालु संबंध।
धन्यवाद। यह पूरी तरह से काम करता है और Googling द्वारा आपका जवाब लगभग असंभव था, इसलिए मुझे कुछ कीवर्ड जोड़ने की अनुमति दें। JAX-WS WSSE – Jimmy2Times
इस कोड का उपयोग करते समय मुझे लॉग द्वारा निम्न अपवाद मिला: 'com.sun.xml.internal.messaging.saaj.soap.impl.ElementImpl addChildElement सेवर: SAAJ0101: SOAPBodyElement का अभिभावक होना चाहिए SOAPBody'। – Vic