2010-08-14 17 views
6

Ich versuche, auf die Seite umzuleiten, auf der der Benutzer versucht hat, sich anzumelden.Wie bekomme ich die Anfrage-URL?

Ich meine, somepage → Login → somepage

Ich weiß, das;

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> 

Aber es funktioniert nicht. Die angeforderte URL ist immer "LoginPro", die den Login-Prozess behandelt. Wenn ein Benutzer auf die Login-Schaltfläche klickt, wird die Seite zu LoginPro weitergeleitet. Also die Anfrage-URL ist immer LoginPro ...

Es scheint so zu sein; somepage → anmelden → loginPro → LoginAction (Anfrage-URL ist loginPro ..) → loginPro

Wie kann ich Benutzer auf die Seite umleiten, auf der sie sich anmelden wollten?

+0

Wäre es eine Option für Sie, eine verborgene Eingabe oder einen URL-Parameter auf jeder Seite einzufügen, die an die Login-Aktion übergeben wird? Ihr Wert könnte die aktuelle Seite sein und Sie könnten dann Ihre Weiterleitung '$ {url}' daraus setzen. – Pat

+0

Ich versuchte Ihre Option .. Ich füge <% = request.getServletPath()%> in Login-JSP, und sein Wert ist wie folgt ... /MyContextPath/tiles/MyTilesLayout.jsp ... Ich weiß es nicht, aber Es ist irgendwie mit Kacheln verwandt. – Deckard

Antwort

5

Danke für Ihre Antworten.

Ich habe diesen Weg gefunden und es funktioniert!

url = request.getHeader ("Referer");

Diese URL ist die genaue URL, wo die Aktion aufgerufen wird.

+0

Danke! Sehr hilfreich! –

0

Wie werden Sie auf Ihre Login-Aktion umgeleitet? Wenn es nur ein einzelner Ort (oder eine gemeinsame Basis, die die Umleitung tut) könnten Sie eine Variable zu der Sitzung hinzufügen, Ihre Login-Aktion SessionAware machen, und dann nur die Quell-URL nach einer erfolgreichen Anmeldung abrufen/entfernen und verwenden?

+0

Mein Login-Formular befindet sich immer im linken Teil der Seite (enthalten in den Kacheln). Und ... Entschuldigung, ich verstehe nicht, was du meinst. Ich weiß nicht, wie man URL in Sitzung findet ..? – Deckard

+0

Was ich meine ist, sagen wir mal, Sie wollten auf einen Ort zugreifen, der eine Anmeldung erfordert. Sagen Sie "Sie müssen sich hier anmelden" und geben Sie einen Link an, oder geben Sie ein "Login" -Ergebnis zurück und leiten Sie zur Login-Aktion um? –

3

Wenn Sie auf einen Link von Login klicken Sie dann in Java hinter dieser Anfrage speichern URL als statische Variable.

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

Dann nach dem Einfügen von Login-Details rufen Sie andere Methode. Verwenden Sie diese statische Variable zum Umleiten.

Zum Beispiel: Ich habe in meiner Website verwendet.

<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; 
}