2013-01-10 12 views
7

Ho due applicazioni Web. Effettuerò il login in un'unica applicazione Web e navigherò a un'altra tramite collegamenti o reindirizzamenti dalla prima applicazione. Infine, dopo aver completato alcuni passaggi nell'applicazione 2, verrà reindirizzato a Applicazione uno. Come posso implementarlo?Java - Come condividere la sessione tra due o più applicazioni Web?

Qui l'Applicazione due è generica e avrò tre istanze di Applicazione Uno, che interagiranno con l'Applicazione due.

Si prega di suggerire un approccio migliore. Devo usare Spring e Spring Webflow per implementarlo.

+0

Utilizzare CAS https://en.wikipedia.org/wiki/Central_Authentication_Service dove esistono diverse implementazioni a seconda della lingua. Per la primavera hai visto questo nel documentario? http://docs.spring.io/spring-security/site/docs/current/reference/html/cas.html –

risposta

4

Tecnicamente, la sessione tra due applicazioni Web (due WAR diversi) non può essere condivisa con. Questo è di progettazione e fatto per i motivi di sicurezza . Vorrei fare seguenti osservazioni e suggerimenti per il vostro problema,

  1. sessione vengono generalmente registrata utilizzando un ID di sessione che è generalmente memorizzato come un cookie sul browser e oggetto di sessione sul lato server.
  2. Questo cookie viene inviato lato server ogni volta quando si invia una richiesta.
  3. Un cookie verrà inviato SOLO al server da dove proviene.
  4. Quindi un cookie impostato su www.mysite.com/app1 verrà inviato solo a www.mysite.com/app1 e non a www.mysite.com/app2.
  5. Per il tuo caso, affinché una sessione utente sia valida su due applicazioni, il browser necessita di due cookie da app1 e app2.
  6. Un modo sarebbe, quando si accede a app1, utilizzando lo script java, anche inviare una richiesta di accesso a app2. Quando entrambe queste richieste ritornano correttamente, il tuo browser avrà una sessione per entrambe le applicazioni (app1 e app2)
  7. Ora il logout avrà le sue sfide, quando esci da app1, devi anche uscire da app2. Tecnicamente questo significa che è necessario cancellare i cookie impostati da entrambe queste applicazioni. Con un piccolo aiuto da script java puoi farlo.
+0

"Quindi un cookie impostato su www.mysite.com/app1 verrà inviato solo a www.mysite.com/app1 e non a www.mysite.com/app2" SBAGLIATO! – user544262772

+0

Dalle specifiche (http://tools.ietf.org/html/rfc2109): l'attributo Path specifica il sottoinsieme di URL a cui questo cookie si applica. – Santosh

+0

Fai riferimento anche a questo post: http://stackoverflow.com/questions/1967963/how-to-access-cookie-values-on-different-paths-of-the-same-domain-using-php – Santosh

5

Quando devi effettuare una chiamata a app2 da app1, passare tutte le informazioni necessarie tramite l'oggetto richiesta (come parametri di richiesta) quindi app2 può leggere e creare la sessione lì (forse un servlet/filtro può essere usato per questo).

è possibile condividere una sessione tra la stessa applicazione (app1 e app1) su macchine che utilizzano il clustering.

+0

Grazie per la risposta Anantha. Posso avere due sessioni separate. Non c'è bisogno di una singola sessione. Si prega di suggerire qualche idea per implementare questo. Non ho idea di come implementarlo. È come un flusso. Sto facendo alcune funzionalità in App1. Dopodiché, vado su App2 e sto facendo qualche altra funzionalità che è la continuazione di App1 e quindi il ritorno a App1 e il completamento del flusso. – shankarmbtech

+0

È come andare alla seconda app per il processo di pagamento e tornare ad App1 – shankarmbtech

+0

Ciò che hai spiegato è un tipico processo di pagamento (come hai detto) il processo qui sarebbe quello di passare tutte le informazioni necessarie come parte delle richieste (di solito HTTP POST) questo creerà una sessione in app2 (che gestisce il pagamento e restituisce) ... –

Problemi correlati