9

apachecxfを使用してjaxrsクライアントでRESTサーバーに接続したい。サーバーには、認証用のURLと、実際の処理を実行するためのその他のURLがあります。ログイン後、サーバーはセッションを作成し、接続を30分間開いたままにします。私の問題は、クライアントが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>

同じセッションを使用するように、またはクライアント間でセッションCookieを共有するように両方のクライアントを構成するにはどうすればよいですか?

4

2 に答える 2

3

私は同じ問題に苦労してきましたが、ようやく解決策にたどり着きました。

1) クライアントに Cookie を保持させます。

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

おそらく、構成とプログラムを介して上記を達成する方法があります。

2) あるクライアントから別のクライアントに Cookie をコピーします。

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

プロキシ A を使用して認証した後、上記のメソッドを呼び出して、実際の作業を行うプロキシ B と Cookie を共有します。

于 2013-04-21T01:33:48.790 に答える