2010-08-14 24 views
6

Estoy intentando redirigir a la página donde el usuario intentó iniciar sesión.¿Cómo obtener la URL de solicitud?

quiero decir, CiertaPágina → entrada → CiertaPágina

Sé que esto;

En LoginAction

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

En struts.xml

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

Pero no está funcionando. La url solicitada es siempre "LoginPro" que maneja el proceso de inicio de sesión. Cuando un usuario hace clic en el botón de inicio de sesión, la página va a LoginPro. Así que la URL de solicitud siempre es loginPro ...

Parece ser de esta manera; somepage → login → loginPro → LoginAction (request url es loginPro ..) → loginPro

¿Cómo puedo redirigir a los usuarios a la página donde intentaron iniciar sesión?

+0

¿Sería una opción para usted incluir una entrada oculta o un parámetro de URL en cada página que pasa a la acción de inicio de sesión? Su valor podría ser la página actual y luego podría configurar su redirección '$ {url}'. – Pat

+0

Intenté su opción ... Agregué <% = request.getServletPath()%> en el inicio de sesión de JSP, y su valor es así ... /MyContextPath/tiles/MyTilesLayout.jsp ... No lo sé, pero de alguna manera está relacionado con las cosas de los azulejos. – Deckard

Respuesta

5

Gracias por su respuesta.

¡He encontrado esta manera y funciona!

url = request.getHeader ("referer");

Esta url es la URL exacta donde se llama la acción.

+0

¡Gracias! ¡Muy útil! –

0

¿Cómo está redireccionando a su acción de inicio de sesión? Si solo hay un lugar (o una base común que redirecciona), ¿podría agregar una variable a la sesión, hacer su acción de inicio de sesión SessionAware y luego recuperar/eliminar la URL de origen después de un inicio de sesión exitoso y usar eso?

+0

Mi formulario de inicio de sesión siempre se encuentra en la parte izquierda de la página (incluido por los mosaicos). Y ... lo siento, no entiendo lo que quieres decir. No sé cómo encontrar la URL en la sesión ..? – Deckard

+0

Lo que quiero decir es, digamos que quería acceder a alguna ubicación que requiera un inicio de sesión. ¿Dice "Necesita iniciar sesión aquí" y proporciona un enlace, o ¿devuelve un resultado de "inicio de sesión" y lo redirecciona a la acción de inicio de sesión? –

3

Al hacer clic en un enlace de Inicio de sesión, entonces en java detrás de esa url de tienda de solicitud como variable estática.

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

Luego, después de insertar los datos de inicio de sesión, llame a otro método. Usa esa variable estática para redirigir.

Por ejemplo: He usado en mi sitio.

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