2010-08-14 11 views
6

Sto provando a reindirizzare alla pagina in cui l'utente ha tentato l'accesso.Come ottenere l'URL della richiesta?

Voglio dire, somepage → → login somepage

So che questo;

In loginAction

HttpServletRequest request = ServletActionContext.getRequest(); 
String url = request.getServletPath(); 
setUrl(url); 

In struts.xml

<action name="LoginPro" method="login" class="LoginAction"> 
    <result type="redirect">${url}</result> 
    <result name="input" type="tiles">login.error</result> 
</action> 

Ma non funziona. L'URL richiesto è sempre "LoginPro" che sta gestendo il processo di accesso. Quando un utente fa clic sul pulsante di accesso, la pagina passa a LoginPro. Quindi l'url della richiesta è sempre loginPro ...

Sembra che sia così; somepage → login → loginPro → LoginAction (richiesta url è loginPro ..) → loginPro

Come posso reindirizzare gli utenti alla pagina in cui hanno tentato l'accesso?

+0

Potrebbe essere un'opzione per includere un input nascosto o un parametro URL su ogni pagina che viene passata all'azione di accesso? Il suo valore potrebbe essere la pagina corrente e quindi potresti impostare il tuo redirect '$ {url}' da esso. – Pat

+0

Ho provato la tua opzione .. Aggiungo <% = request.getServletPath()%> in login JSP, e il suo valore è come questo ... /MyContextPath/tiles/MyTilesLayout.jsp ... Non so ma è in qualche modo legato alle cose delle piastrelle. – Deckard

risposta

5

Grazie per le vostre risposte.

Ho trovato in questo modo e funziona!

url = request.getHeader ("referer");

Questo URL è l'URL esatto in cui viene chiamata l'azione.

+0

Grazie! Molto utile! –

0

Come stai reindirizzando l'azione di accesso? Se si tratta solo di un singolo punto (o di una base comune che esegue il reindirizzamento), è possibile aggiungere una variabile alla sessione, effettuare l'azione di accesso SessionAware e quindi recuperare/rimuovere l'URL di origine dopo un accesso riuscito e utilizzarlo?

+0

Il mio modulo di login è sempre nella parte sinistra della pagina (incluso in tiles). E .. scusa, non capisco cosa intendi. Non so come trovare l'URL in sessione ..? – Deckard

+0

Ciò che intendo è, supponiamo che tu voglia accedere ad un percorso che richiede un accesso. Dici "Devi accedere qui" e fornire un collegamento, oppure restituisci un risultato di "accesso" e reindirizza all'azione di accesso? –

3

Quando si fa clic su un collegamento di Login, in Java dietro a tale richiesta si memorizza l'url come variabile statica.

static String url = request.getHeader("referer");</p> 

Quindi dopo aver inserito i dettagli di accesso si chiama l'altro metodo. Usa quella variabile statica per reindirizzare.

Ad esempio: ho usato nel mio sito.

<action name="login" class="actions.Login.LoginAuthenticate" method="input">  
    <!--Cookie functionality done --> 
    <result name="input">Login/login.jsp</result> 
</action> 

<action name="loginAuthenticate" class="actions.Login.LoginAuthenticate" method="execute"> 
     <!--Cookie functionality done --> 
     <result name="redirect" type="redirect">${redirectUrl}</result> 
     <result name="input">Login/login.jsp</result> 
</action> 

public String execute() throws Exception { 
    if(getCheckCookies()){ 
      setRedirectUrl("/login"); 
      return "redirect"; 
    } 
    Cookie un = new Cookie("un" , lemail); 
    un.setMaxAge(-1); 
    un.setVersion(1); 
    servletResponse.addCookie(un); 
    System.out.println("------>--------->------> " + redirectUrl); 
    return "redirect"; 
} 


public String input() throws Exception { 
    HttpServletRequest request = ServletActionContext.getRequest(); 
    setRedirectUrl(request.getHeader("Referer")); 
    return INPUT; 
} 

public static String redirectUrl; 

public void setRedirectUrl(String redirectUrl){ 
    this.redirectUrl = redirectUrl; 
} 
public String getRedirectUrl(){ 
    return this.redirectUrl; 
} 
Problemi correlati