2012-10-15 29 views
6

का उपयोग करने के लिए कॉन्फ़िगर करें मैं अपाचे सीएक्सएफ का उपयोग कर एक जैक्सर्स क्लाइंट के साथ एक आरईएसटी सर्वर से कनेक्ट करना चाहता हूं। सर्वर को वास्तविक सामग्री करने के लिए प्रमाणीकरण और कुछ अन्य यूआरएल के लिए एक यूआरएल है। लॉगिन के बाद सर्वर एक सत्र बनाता है और 30 मिनट के लिए कनेक्शन खोलता रहता है। मेरी समस्या यह है कि क्लाइंट कुकीज़ को संग्रहीत नहीं करता है और मुझे हमेशा सर्वर पर नया (प्रमाणित नहीं) सत्र मिलता है।दो सीएक्सएफ जैक्सर्स क्लाइंट को उसी सत्र (कुकीज़)

मैंने ग्राहकों को अपने वसंत अनुप्रयोग संदर्भ में कॉन्फ़िगर किया।

<jaxrs:client id="loginResource" 
    serviceClass="com.mycompany.rest.resources.LoginResource" 
    address="${fsi.application.url}"> 
</jaxrs:client> 
<jaxrs:client id="actionResource" 
    serviceClass="com.mycompany.rest.resources.ActionResource" 
    address="${fsi.application.url}"> 
</jaxrs:client> 

कैसे मैं दोनों ग्राहकों को एक ही सत्र का उपयोग करें, या ग्राहकों के बीच कुकीज़ साझा करने के लिए कॉन्फ़िगर कर सकते हैं?

+0

सत्र के साथ आरईएसटी सर्वर ?? यह कैसे संभव है? – yegor256

+0

हम ग्राहक को सर्वर को लागू नहीं करते हैं। हम जानते हैं कि आरईएसटी स्टेटलेस होना चाहिए और सत्रों का उपयोग नहीं करना चाहिए, लेकिन दुर्भाग्यवश हम सर्वर को नहीं बदल सकते हैं। –

उत्तर

1

मैं एक ही समस्या से जूझ रहा हूं, और मैं अंततः एक समाधान पर पहुंचा।

1) ग्राहक को कुकीज़ बनाए रखें।

WebClient.getConfig(proxy).getRequestContext().put(
     org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE); 

शायद वहाँ प्रोग्राम के रूप में इसके बाद के संस्करण के माध्यम से विन्यास बनाम पूरा करने के लिए एक तरीका है।

2) कुकीज़ को एक क्लाइंट से दूसरे क्लाइंट में कॉपी करें।

public static void copyCookies(Object sourceProxy, Object targetProxy) { 
    HTTPConduit sourceConduit = WebClient.getConfig(sourceProxy).getHttpConduit(); 
    HTTPConduit targetConduit = WebClient.getConfig(targetProxy).getHttpConduit(); 
    targetConduit.getCookies().putAll(sourceConduit.getCookies()); 
} 

प्रमाणित करने के लिए प्रॉक्सी एक का उपयोग कर के बाद, मैं प्रॉक्सी बी, जो वास्तविक काम करता है के साथ अपने कुकीज़ साझा करने के लिए उपरोक्त विधि कहते हैं।