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?
我一直在为同样的问题而苦苦挣扎,我终于找到了解决方案。
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 执行实际工作。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1751 次  |  
        
|   最近记录:  |