Parto da un esempio, magari e' piu' facile da capire. Diciamo che sto costruendo una webapp, magari un qualcosa tipo un esplora risorse che mi mostra file e cartelle che ho sul server.
L'applicazione e' fortemente basata su javascript e l'approccio che sto usando e' di questo genere:
se ho un URL del tipo http://miaapp.com/editor.jsp#cartella1
allora via AJAX faccio una richiesta al server per il contenuto di cartella1, ricevo indietro un XML, lo parso e mostro il contenuto della cartella in una interfaccia tipo esplora risorse. Da li' faccio doppio click su una cartella (o click su un link "Open"), diciamo cartella2, l'URL viene "cambiato" in http://miaapp.com/editor.jsp#cartella2, via AJAX chiedo al server il nuovo XML col contenuto di cartella2 e cosi' via. Ora, cosi' facendo ho ottenuto che se l'utente e' loggato nel senso che la sua sessione e' attiva, se apro una nuova finestra del browser e copio/incollo http://miaapp.com/editor.jsp#cartella1 il mio esplora risorse viene correttamente caricato e visualizzo il contenuto di cartella1.
Il problema pero' e' quando l'utente non e' loggato. Se cerco di andare a http://miaapp.com/editor.jsp#cartella1 un Filter (AuthFilter) interviene, e fa il forward alla pagina di login perche' non c'e' alcuna sessione attiva. Dalla pagina di login recupero qual'era la destinazione iniziale dell'utente con
con l'idea di fare il redirect a quella pagina una volta che il login e' avvenuto con successo. Ovviamente pero' l'URL a cui redirezionare non contiene piu' l'anchor (#cartella1) perche' l'anchor vive solamente lato client. Pero' l'unico modo di tradurre quell'anchor in un indirizzo con query string e' via javascript, ma essendo che interviene un Filter prima di arrivare a qualunque pagina non c'e' la possibilita' di usare codice client side. Ora se non si riesce a fare non e' gravissimo, ho appena provato con GMail e neanche loro supportano una cosa del genere, ma mi chiedevo se qualcuno avesse qualche idea su come fare.codice:${requestScope['javax.servlet.forward.servlet_path']}
![]()