2011-10-12 12 views
7

Sto usando PrettyFaces nella mia applicazione JSF. Il sito richiede l'autenticazione per accedere ad alcune pagine, quindi sto usando un listener (vista prerender) che controlla se l'utente è loggato. Quindi, se l'utente prova ad accedere a/foo (/foo.jsf prima di PrettyFaces), reindirizzamento/login.Ottenere l'URI della richiesta originale con PrettyFaces

Tuttavia, voglio per orientarle verso la loro destinazione iniziale, quindi voglio allegare un parametro di richiesta "next" in modo che io reindirizzare l'utente a/login? Successivo =/foo, invece. Purtroppo, non posso ottenere l'originale requestURI dall'oggetto richiesta, la stringa uri nel codice seguente viene /appname/foo.jsf invece di/appname/foo

ctx = FacesContext.getCurrentInstance().getExternalContext(); 
HttpServletRequest request = (HttpServletRequest) ctx.getRequest(); 
String uri = request.getRequestURI(); 

C'è un modo per recuperare l'originale Percorso URI?

risposta

6

PrettyFaces utilizza sotto le copertine RequestDispatcher#forward() per inoltrare un URL grazioso all'URL reale. Utilizzando questa tecnica, l'URI di richiesta originale è disponibile come attributo di richiesta con la chiave RequestDispatcher#FORWARD_REQUEST_URI.

Quindi, questo dovrebbe fare:

String originalURI = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI); 
// ... 
+0

Grazie mille! È effettivamente memorizzato in requestMap, tuttavia il nome della chiave era leggermente diverso e dato come una stringa. Il seguente ha funzionato. String originalURI = (String) ctx.getRequestMap(). Get ("javax.servlet.forward.request_uri"); – ustun

+0

Uhm, è lo stesso valore di 'RequestDispatcher # FORWARD_REQUEST_URI'. Vedi anche javadoc: http://download.oracle.com/javaee/6/api/constant-values.html#javax.servlet.RequestDispatcher.FORWARD_REQUEST_URI Che cosa hai ottenuto esattamente quando sysout il valore? O semplicemente non è stato compilato? (quella costante è stata introdotta in Servlet 2.5). – BalusC

+0

Sì, non è stato compilato, lamentandosi del campo mancante. Strano, ho pensato che stavo già usando Servlet 2.5 (averlo nelle dipendenze), ma forse qualche altra vecchia versione sta scavalcando. – ustun

3

Usa questo codice per ottenere l'URL richiesta originale:..

PrettyContext.getCurrentInstance() getRequestUrl() toURL()

Problemi correlati