2009-10-23 15 views
19

मैं जेएक्स-डब्ल्यूएस में नया हूं और एक ऐसी चीज है जिसे मैं समझ नहीं पा रहा हूं।जेएक्स-डब्ल्यूएस और बेसिक प्रमाणीकरण, जब उपयोगकर्ता नाम और पासवर्ड डेटाबेस में हैं

जेएक्स-डब्लूएस सुरक्षा को स्थापित करने के तरीके पर ट्यूटोरियल का एक टन उपलब्ध है, लेकिन बहुत सारे मामलों में बाध्यकारीप्रोवाइडर.USERNAME_PROPERTY और BindingProvider.PASSWORD_PROPERTY कुछ .xml फ़ाइल में संग्रहीत हैं (कंटेनर के आधार पर मुझे विश्वास है) - वे "हार्डकोडेड" हैं। और यही वह है जो मुझे नहीं मिलता है। डेटाबेस में मौजूद उपयोगकर्ता नाम और पासवर्ड के साथ BindingProvider.USERNAME_PROPERTY और BindingProvider.PASSWORD_PROPERTY की तुलना करके मैं एक वेब सेवा क्लाइंट को प्रमाणित कैसे कर सकता हूं? इस तरह पुन: प्राप्त करने

ShopingCartService scs = new ShopingCartService(wsdlURL, name); 
    ShopingCart sc = scs.getShopingCartPort(); 
    Map<String, Object> requestContext = ((BindingProvider)sc).getRequestContext(); 
    requestContext.put(BindingProvider.USERNAME_PROPERTY, userName); 
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password); 
    sc.someFunctionCall(); 

और फिर, सर्वर साइड पर: मैं इस तरह BindingProvider.USERNAME_PROPERTY और BindingProvider.PASSWORD_PROPERTY की स्थापना क्लाइंट की तरफ करने की कोशिश की

@Resource 
WebServiceContext wsContext; 

@WebMethod 
public void someFunctionCall() { 
    MessageContext mc = wsContext.getMessageContext(); 
    mc.get(BindingProvider.USERNAME_PROPERTY); 
    mc.get(BindingProvider.PASSWORD_PROPERTY); 
} 

लेकिन मैं हमेशा अशक्त मिलता है, मैं नहीं था 'टी एक्सएमएल में कुछ भी की स्थापना की, वेब सेवा बस ठीक काम करता है, को छोड़कर मैं उन चर :(

मैं दोनों जावा 1.6, बिल्ला 6 और JAX-WS पर चल रहा हूँ नहीं मिल सकता है।

डेटाबेस से पासवर्ड वाले उपयोगकर्ताओं को प्रमाणीकृत करने में कोई मदद की सराहना की जाती है, धन्यवाद।

+0

मैं भी अशक्त एक SOAPHandler में BindingProvider.USERNAME_PROPERTY के लिए जाँच की कोशिश की है, अभी भी। – ahoge

उत्तर

12

बाइंडिंगप्रोवाइडर.USERNAME_PROPERTY और BindingProvider.PASSWORD_PROPERTY HTTP मूल प्रमाणीकरण तंत्र से मेल खाते हैं जो HTTP स्तर पर प्रमाणीकरण प्रक्रिया को सक्षम करते हैं, न कि अनुप्रयोग और न ही सर्वलेट स्तर पर।

असल में, केवल HTTP सर्वर उपयोगकर्ता नाम और पासवर्ड (और अंततः अपाचे/PHP के साथ HTTP/अनुप्रयोग सर्वर विनिर्देश के अनुसार आवेदन) को जानता होगा। टॉमकैट/जावा के साथ, अपने web.xml में एक लॉगिन कॉन्फ़िगरेशन BASIC जोड़ें और उचित सुरक्षा-बाधा/सुरक्षा-भूमिकाएं (भूमिकाएं जिन्हें बाद में उपयोगकर्ताओं/वास्तविक उपयोगकर्ताओं के समूहों से जोड़ा जाएगा)।

<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>YourRealm</realm-name> 
</login-config> 

फिर, उचित उपयोगकर्ता भंडार के साथ HTTP सर्वर (या अनुप्रयोग सर्वर) स्तर पर दायरे को कनेक्ट करें। टोमकैट के लिए आप JAASRealm, JDBCRealm या DataSourceRealm को देख सकते हैं जो आपकी आवश्यकताओं के अनुरूप हो सकता है।

http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

19

मुझे लगता है कि आप आवेदन स्तर में JAX-WS प्रमाणीकरण के लिए देख रहे हैं, सर्वर स्तर में HTTP बुनियादी नहीं।

Application Authentication with JAX-WS

वेब सेवा ग्राहक साइट पर, सिर्फ अनुरोध हेडर में अपने "उपयोगकर्ता नाम" और "पासवर्ड" डाल: पूर्ण उदाहरण निम्नलिखित देखें।

Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext(); 
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL); 

Map<String, List<String>> headers = new HashMap<String, List<String>>(); 
headers.put("Username", Collections.singletonList("someUser")); 
headers.put("Password", Collections.singletonList("somePass")); 
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); 

वेब सेवा सर्वर साइट पर, WebServiceContext के माध्यम से अनुरोध हेडर पैरामीटर प्राप्त करें।

@Resource 
WebServiceContext wsctx; 

@WebMethod 
public String method() { 
    MessageContext mctx = wsctx.getMessageContext(); 

    Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS); 
    List userList = (List) http_headers.get("Username"); 
    List passList = (List) http_headers.get("Password"); 
    //... 
+0

क्या मैं पूछ सकता हूं कि आपको ऐसी जानकारी कहां मिली? मुझे सूचना के आधिकारिक स्रोत की आवश्यकता है लेकिन मुझे पर्याप्त जानकारी के साथ कोई आधिकारिक स्रोत नहीं मिला! –

+3

यहां दिया गया उदाहरण बहुत खराब डिजाइन और बहुत असुरक्षित है। आपको सुरक्षा समाधान को कभी भी सेंकना नहीं चाहिए। उदाहरण असुरक्षित http पर उपयोगकर्ता नाम और पासवर्ड भी स्थानांतरित करता है। अगर कोई नेटवर्क सुन रहा है तो इसे चुनना आसान है। बुनियादी प्रमाणीकरण को कॉन्फ़िगर करना भी बहुत आसान है (हिमपात का जवाब देखें), और उस पर https का उपयोग करें। यह कम से कम एक सभ्य समाधान है जिसके लिए त्रुटि प्रवण प्रोग्रामिंग की आवश्यकता नहीं है - और पासवर्ड असुरक्षित नेटवर्क पर सुरक्षित हैं। –

6

मैं एक ही समस्या थी, और यहाँ समाधान पाया: एक को देखने के अनुप्रयोग स्तर और बुनियादी HTTP प्रमाणीकरण पर दोनों, प्रमाणीकरण का उपयोग एक उदाहरण के लिए

http://www.mastertheboss.com/web-interfaces/336-jax-ws-basic-authentication.html?start=1

सौभाग्य

+0

धन्यवाद (समाधान को कॉपी/पेस्ट करने के लिए बेहतर होगा ...: पी) – boly38

1

मैं एक समान स्थिति का सामना कर रहा था, मुझे अपने डब्ल्यूएस: उपयोगकर्ता नाम, पासवर्ड और डब्ल्यूएसएस पासवर्ड प्रकार प्रदान करने की आवश्यकता है।

मैं शुरू में "HTTP मूल प्रमाणीकरण" (@ahoge के रूप में) का उपयोग किया गया था, मैं @ फिलिप-देव के रेफरी का उपयोग करने की कोशिश की। भी। मुझे सफलता का समाधान नहीं मिला।

गूगल पर एक छोटे से गहरी खोज के बाद, मैं इस पोस्ट पाया:

https://stackoverflow.com/a/3117841/1223901

और वहाँ मेरी समस्या समाधान

था मुझे आशा है कि यह किसी और के लिए मदद कर सकते हैं, जैसे मेरे लिए मदद करता है।

Rgds, iVieL

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

  • कोई संबंधित समस्या नहीं^_^