配置两个cxf jaxrs客户端以使用相同的会话(cookie)

Bor*_*ler 7 cookies rest session cxf jax-rs

我想使用apache cxf连接到带有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>
Run Code Online (Sandbox Code Playgroud)

如何配置两个客户端以使用相同的会话,或在客户端之间共享cookie?

txd*_*dev 3

我一直在为同样的问题而苦苦挣扎,我终于找到了解决方案。

1)让客户端保留cookie。

WebClient.getConfig(proxy).getRequestContext().put(
        org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

也许有一种方法可以通过配置与编程来完成上述任务。

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());
}
Run Code Online (Sandbox Code Playgroud)

使用代理 A 进行身份验证后,我调用上述方法与代理 B 共享其 cookie,代理 B 执行实际工作。