2012-10-15 10 views
6

Desidero connettermi a un server REST con un client jaxrs che utilizza apache cxf. Il server ha un URL per l'autenticazione e alcuni altri URL per fare le cose reali. Dopo il login, il server crea una sessione e mantiene la connessione aperta per 30 minuti. Il mio problema è che il client non memorizza i cookie e ottengo sempre una nuova sessione (non autenticata) sul server.Configurare due client cxf jaxrs per utilizzare la stessa sessione (cookie)

Ho configurato i client nel mio contesto applicativo di primavera.

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

Come posso configurare entrambi i client per utilizzare la stessa sessione o condividere i cookie tra i client?

+0

server REST con sessioni ?? come è possibile? – yegor256

+0

Implementiamo il client non il server. Sappiamo che REST dovrebbe essere stateless e non utilizzare le sessioni, ma sfortunatamente non possiamo cambiare il server. –

risposta

1

Ho sofferto con lo stesso problema e sono appena arrivato a una soluzione.

1) Consentire al cliente di conservare i cookie.

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

Forse c'è un modo per realizzare quanto sopra tramite la configurazione vs. livello di programmazione.

2) Copia i cookie da un client all'altro.

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

Dopo aver utilizzato delega A per l'autenticazione, che io chiamo il metodo di cui sopra per condividere i suoi biscotti con delega B, che fa il lavoro vero e proprio.

Problemi correlati