2010-08-14 9 views
6

Próbuję przekierować na stronę, na której użytkownik próbował się zalogować.Jak uzyskać adres URL żądania?

Znaczy, JakaśStrona → Zaloguj się → JakaśStrona

wiem to;

W LoginAction

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

W struts.xml

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

Ale to nie działa. Żądanym adresem URL jest zawsze "LoginPro", który obsługuje proces logowania. Gdy użytkownik kliknie przycisk logowania, strona przechodzi do LoginPro. Tak więc URL żądania to zawsze loginPro ...

Wygląda na to, że tak; strona logowania → login → loginPro → LoginAction (żądanie jest loginem ..) → loginPro

Jak mogę przekierować użytkowników na stronę, na której próbowali się zalogować?

+0

Czy można dołączyć ukryte dane wejściowe lub adresy URL na każdej stronie, która zostanie przekazana do akcji logowania? Jego wartością może być bieżąca strona, a następnie możesz ustawić przekierowanie '$ {url}' z niego. – Pat

+0

Próbowałem Twojej opcji .. Dodaję <% = request.getServletPath()%> w JSP logowania, a jej wartość jest taka ... /MyContextPath/tiles/MyTilesLayout.jsp ... Nie wiem, ale to jest w jakiś sposób związane z kaflami. – Deckard

Odpowiedz

5

Dzięki za odpowiedzi.

Znalazłem tę drogę i to działa!

url = request.getHeader ("referer");

Ten adres URL jest dokładnym adresem URL, pod którym wywoływana jest akcja.

+0

Dziękujemy! Bardzo przydatne! –

0

Jak przekierowujesz do akcji logowania? Jeśli jest to tylko jedno miejsce (lub jakaś wspólna baza przekierowująca), czy możesz dodać zmienną do sesji, wykonać akcję Login SessionAware, a następnie pobrać/usunąć źródłowy adres URL po udanym logowaniu i użyć tego?

+0

Mój formularz logowania jest zawsze w lewej części strony (uwzględniany przez kafelki). I ... przepraszam, nie rozumiem, co masz na myśli. Nie wiem, jak znaleźć URL w sesji ...? – Deckard

+0

Chodzi mi o to, powiedzmy, że chcesz uzyskać dostęp do niektórych lokalizacji, które wymagają logowania. Czy mówisz "Musisz się zalogować tutaj" i podać link, czy zwrócisz wynik "logowania" i przekierujesz do akcji logowania? –

3

Po kliknięciu łącza Zaloguj się w java za tym adresem URL żądania żądania jako zmienną statyczną.

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

Następnie po wprowadzeniu danych logowania u wywołanie innej metody. Użyj tej statycznej zmiennej do przekierowania.

Na przykład: użyłem w mojej witrynie.

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