2010-02-18 10 views
31

Quando un client non autenticato richiede un URL che richiede un livello di accesso non anonimo come definito in security-config.xml, la sicurezza Spring invia un reindirizzamento HTTP alla nostra pagina di accesso (ad esempio /login). Va bene.Come impedire l'aggiunta della sicurezza di primavera; jsessionid = XXX per accedere ai reindirizzamenti?

Il problema è che in assenza di una sessione esistente (identificata da un cookie fornito nella richiesta del client), problemi di sicurezza di primavera un reindirizzamento che specifica anche la nuova sessione del client nell'URL, ad es. /login;jsessionid=8o7pglapojus.

Molti contenitori supportano questo (apparentemente funziona bene in tomcat?), Ma sembra che Jetty (che è quello che stiamo usando in questo momento) non lo fa - l'URL reindirizzato arriva attraverso il nostro router URL completamente intatto (incluso il "parametro" jsessionid, e la sessione denominata non è associata alla richiesta /login tramite jetty/spring-security (cioè un ID di sessione totalmente nuovo viene fornito nell'intestazione Set-Cookie della risposta alla richiesta /login).

Possiamo aggirare questo facendo corrispondere /login.* nei nostri percorsi, ma sono curioso di sapere se esiste un modo per prevenire l'emissione dell'ID di sessione nel reindirizzamento dell'autenticazione per iniziare.

risposta

42

In Spring Security 3.0.0 M1 o più recente è possibile impostare disable-url-rewriting="true" nello spazio dei nomi <http>. Vedi se questo aiuta. Vedi anche questo feature request.

+0

@BalusC qualsiasi nota soluzione pre-molla 3? – Xorty

+0

@Xorty Dai un'occhiata a http://fralef.org/tomcat-disable-jsessionid-in-url.html, se l'aggiornamento a Spring Security 3+ non è un'opzione. –

8

Ora sembra così.

<security:http auto-config="false" use-expressions="true" disable-url-rewriting="true"> 

Dopo questo, la vostra applicazione sarà in grado di eseguire i lavori con stato correttamente.

+2

corretto. Significa che se il client non consente i cookie, solo allora l'applicazione non sarà in grado di eseguire processi di stato completi? – Sudarshan

0

@ahmet alp balkan:

seamframework fornire una soluzione migliore di randomcoders. http://seamframework.org/Documentation/RemovingJSESSIONIDFromYourURLsAndFixingScache

@BalusC:

Se FilterChainProxy sviluppatore usato di sicurezza primavera implementare la funzione securtiy, semplicemente non utilizzando namespace http.

Quindi non è stato possibile trovare un modo per aggiungere la funzione di riscrittura disable-url senza provare ad aggiungere un filtro personalizzato alla catena di filtri o inserire un filtro indipendente su web.xml.

0

Dal momento che si sta utilizzando molo, è sufficiente aggiungere il seguente tag context-param nel web.xml,

<!-- Disables appending JSESSSIONID in browser address bar/requests --> 
<context-param> 
    <param-name>org.eclipse.jetty.servlet.SessionIdPathParameterName</param-name> 
    <param-value>none</param-value> 
</context-param> 

consultare: Session Management - Jetty Doc

Problemi correlati