2009-05-18 17 views
46

Ho il requisito di dover eseguire più server tomcat in una singola casella fisica. Durante l'accesso a questi da un browser, quando l'utente passa da un'applicazione all'altra, risulta che l'utente ha precedentemente effettuato l'accesso all'applicazione. Questo a causa del conflitto di cookie JSESSIONID.Modifica cookie Nome JSESSIONID

Una possibile soluzione consiste nell'eseguire ciascuna applicazione in un contesto diverso. Sfortunatamente, le mie applicazioni non funzioneranno con le impostazioni del percorso di contesto poiché nessuna delle risorse è accessibile con request.getContextPath() anteposto in primo piano.

Questo mi lascia cambiare il nome del cookie JSESSIONID per risolvere il conflitto. C'è un modo per fare questo? Se sì, come?

Spero di essere chiaro nell'affermare la mia domanda.

Nota: tutte le applicazioni sono in esecuzione in una porta diversa nella stessa macchina.

+3

In che modo riesci a eseguire "più server tomcat" sulle stesse porte l'uno nell'altro allo stesso tempo? –

+2

@HarryLime: può capitare con un server proxy. – Thilo

risposta

4

Non credo sia possibile, a questo punto - vedere https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

L'ultima voce afferma: "Questo è stato risolto in 5.5.x e sarà incluso nel 5.5.28 in poi" - che è il punto successivo release - 5.5.27 è la versione corrente.

+0

Grazie per averlo scoperto. Sembra che l'unica opzione rimasta per me sia quella di modificare l'origine tomcat esistente. Il rapporto bug/funzionalità indica chiaramente la mia esatta esigenza e soluzione. Grazie per la risposta. – ramanr

2

Non sicuro al 100% se funziona, ma è possibile utilizzare l'attributo jvmRoute, che viene generalmente utilizzato in un ambiente con bilanciamento del carico/cluster per consentire ai bilanciatori del carico di distinguere i nodi. Esempio:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> 

Questo finirà per generare un valore JSESSIONID che assomiglia "ABCDEF123456.node1".

Documentation link.

+0

Riguarda il valore del cookie, non il suo nome, giusto? –

13

Utilizzando due proprietà di sistema seguenti è possibile ottenere questo risultato con facilità.

  • org.apache.catalina.SESSION_COOKIE_NAME
  • org.apache.catalina.SESSION_PARAMETER_NAME

Qualsiasi valore può essere passato a proprietà sopra per modificare i valori predefiniti.

Qui viene trovato complete details con uno script di esempio.

+1

Questo non funziona più per Tomcat7 +. Ora puoi impostarlo nella configurazione del contesto, vedi la risposta di @ timkingman. – Thilo

+0

Ho fatto questo su tomcat 6, ma sto ancora ricevendo lo stesso problema –

+0

e il molo? – gstackoverflow

12

le seguenti opere per me su Tomcat7 nel file context.xml:

<Context path="/yourApp" sessionCookieName="custom_session_id"> 
45

Tutto è molto più semplice con Servlet API 3.0.

Ora è possibile configurarlo in web.xml:

<session-config> 
    <cookie-config> 
     <name>MY_JSESSIONID_YAHOOOOOO</name> 
    </cookie-config> 
</session-config> 

Questo è tutto!

+0

la migliore risposta! – x4k3p

Problemi correlati