2012-10-15 34 views
6

Tôi muốn kết nối với máy chủ REST bằng ứng dụng khách jaxrs bằng cách sử dụng apache cxf. Máy chủ có url để xác thực và một số url khác để thực hiện công cụ thực tế. Sau khi đăng nhập, máy chủ tạo phiên và giữ kết nối trong 30 phút. Vấn đề của tôi là khách hàng không lưu trữ các tập tin cookie và tôi luôn luôn nhận được một phiên mới (không được chứng thực) trên máy chủ.Định cấu hình hai ứng dụng khách jxrs cxf để sử dụng cùng một phiên (cookie)

Tôi đã định cấu hình ứng dụng khách trong ngữ cảnh ứng dụng mùa xuân của mình.

<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> 

Làm cách nào để cấu hình cả hai khách hàng sử dụng cùng một phiên hoặc chia sẻ cookie giữa các khách hàng?

+0

Máy chủ REST có phiên? Làm thế nào là nó có thể? – yegor256

+0

Chúng tôi triển khai máy khách chứ không phải máy chủ. Chúng tôi biết rằng REST nên là không trạng thái và không sử dụng phiên, nhưng rất tiếc, chúng tôi không thể thay đổi máy chủ. –

Trả lời

1

Tôi đã gặp khó khăn với cùng một vấn đề và cuối cùng tôi đã đến một giải pháp.

1) Làm cho khách hàng giữ lại cookie.

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

Có thể có cách để thực hiện điều này thông qua cấu hình so với lập trình.

2) Sao chép cookie từ ứng dụng khách này sang ứng dụng khách khác.

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

Sau khi sử dụng proxy A để xác thực, tôi gọi phương thức trên để chia sẻ cookie với proxy B, công việc thực tế.

Các vấn đề liên quan