2009-04-01 14 views
15

मैंने इसे CXF User Guide का उपयोग करके काम करने की कोशिश की, लेकिन मुझे कोई भाग्य नहीं मिला।सीएक्सएफ ढांचे का उपयोग कर HTTP बुनियादी प्रमाणीकरण के साथ संरक्षित एक वेब सेवा का उपयोग कैसे करूं?

मैं जावा कोड का उपयोग कर वेब सेवा को कॉल करने का प्रयास कर रहा हूं।

+0

यह लिंक मुझे एक ही मुद्दा http://www.brimllc.com/2011/04/apache-cxf-client-setting-http-request-header-for-basic-authentication/comment को हल करने में मदद की -पृष्ठ -1/# टिप्पणी -4313 –

उत्तर

24

यह जेएक्स-डब्ल्यूएस विशिष्टता द्वारा कवर किया गया है।

((BindingProvider)proxy).getRequestContext().put(
    BindingProvider.USERNAME_PROPERTY, "joe"); 
((BindingProvider)proxy).getRequestContext().put(
    BindingProvider.PASSWORD_PROPERTY, "pswd"); 

क्रम उन्हें HTTP शीर्ष लेख में कहते हैं: असल में, अनुरोध संदर्भ पर गुण के रूप में नाम/पासवर्ड सेट करें।

+5

उल्लेख करने लायक हो सकता है कि आपको केवल सीएक्सएफ पोर्ट डालना होगा: बाइंडिंगप्रोवाइडर पोर्टबीपी = (बाइंडिंगप्रोवाइडर) पोर्ट; portBP.getRequestContext()। डाल (BindingProvider.USERNAME_PROPERTY, "उपयोगकर्ता नाम"); portBP.getRequestContext()। (बाध्यकारी प्रदाता .PASSWORD_PROPERTY, "पासवर्ड") डालें; – Francois

6

एक बेहतर तरीका नहीं है:

जब डबल्यूएसडीएल से जावा पैदा करने, विकल्प जोड़ने "सच -exsh":

wsdl2java -exsh सच -p edu.sharif.ce http://wsdl.ir/WebServices/WebService.asmx?WSDL

और उपयोग करते समय उपयोगकर्ता प्रमाण पत्र जोड़ें:

UserCredentials user = new UserCredentials(); 
user.setUserid("user"); 
user.setPassword("pass"); 

ResearchWebService_Service service = new ResearchWebService_Service(); 
ResearchWebService port = service.getResearchWebService(); 
port.addNewProject(newProject, user); 
+0

क्या आप वाकई HTTP अनुरोध हेडर में मूल प्रमाणीकरण सक्षम करेंगे? यह शायद प्राधिकरण HTTP शीर्षलेख स्थापित करने के बजाय SOAP संदेश के अंदर प्रमाण-पत्र सेट करेगा ... (जैसा कि दस्तावेज़ कहते हैं कि यह 'निहित साबुन शीर्षलेख' पर चल रहा है) – Geert

7

आप अपना खुद का प्रमाणक प्रदान कर सकते हैं। इस तरह यह काम करेगा यदि डब्लूडीएसएल स्वयं मूल HTTP प्रमाणीकरण द्वारा संरक्षित है।

@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl") 
static XxxService service; 

public static void main(String[] args) { 

    Authenticator.setDefault(new Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("user", "password".toCharArray()); 
     } 
    }); 

    service = new XxxService(); 
    Xxx port = service.getXxxPort(); 

    // invoke webservice and print response 
    XxxResponse resp = port.foo(); 
    System.out.println(resp.toString()); 

} 
+0

ध्यान दें कि 'Authenticator.setDefault (प्रमाणीकरणकर्ता) विधि स्थिर है और इस प्रकार आपके सभी धागे पर लागू होगा। हालांकि, प्रति थ्रेड की विभिन्न प्रमाणीकरण जानकारी को सहेजने के लिए 'थ्रेडलोकल' चर का उपयोग कर इसे प्राप्त करना काफी आसान है। – Marco

+1

मुझे लगता है कि 'Authenticator.setDefault' स्थिर है लेकिन यह एक सिंक्रनाइज़ विधि भी है। क्या इसे वास्तव में थ्रेडलोकल का उपयोग करने की आवश्यकता है? –

संबंधित मुद्दे

 संबंधित मुद्दे