2012-10-15 79 views
6

我想通過使用apache cxf的jaxrs客戶端連接到REST服務器。服務器有一個URL來驗證和一些其他的URL做實際的東西。登錄後,服務器創建一個會話並保持連接30分鐘。我的問題是,客戶端不存儲cookie,並且我總是在服務器上獲得新的(未驗證的)會話。配置兩個cxf jaxrs客戶端使用相同的會話(cookie)

我在我的spring應用程序上下文中配置了客戶端。

<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

REST服務器會話?這怎麼可能? – yegor256

+0

我們實現客戶端而不是服務器。我們知道REST應該是無狀態的而不是使用會話,但不幸的是我們無法更改服務器。 –

回答

1

我一直在努力解決同樣的問題,最後我終於找到了解決方案。

1)讓客戶保留cookie。

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

也許有一種方法可以通過編程實現上述配置。

2)將cookies從一個客戶端複製到另一個客戶端。

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()); 
} 

使用代理進行驗證後,我把上面的方法與代理B,其執行的實際工作分享其餅乾。