2012-01-06 21 views
6

Antes del inicio de sesión de usuario, si escribe xxx.detail.jsf, se redireccionará a la página de inicio de sesión para permitir el inicio de sesión del usuario. Esta tarea ya se ha realizado. ¿Cómo puedo hacer para volver a dirigirme al xxx.detail.jsf después de que el usuario inicie sesión con éxito?¿Cómo redirigir a la página de acceso de deseo del usuario después del inicio de sesión del usuario?

Estoy usando Eclipse Indigo, Tomcat 7 y Mojarra 2.0.3.

+0

Lo que quiere decir es ciertamente confuso. ¿Qué quiere decir con "* si escribe' xxx.detail.jsf', redirigirá a la página de inicio de sesión * "? – Lion

+0

@Lion si el usuario intenta acceder a alguna página (por ejemplo: detail.jsf) antes de iniciar sesión, el sistema redirigirá al usuario a la página de inicio de sesión y redirigirá a la página (por ejemplo: detail.jsf) que el usuario desea acceso después de que el usuario inicie sesión exitosamente en el sistema. –

Respuesta

10

En el momento en que está redireccionando a la página de inicio de sesión, debe guardar el URI de solicitud actual. Probablemente esté usando un Filter para realizar la verificación de inicio de sesión y la redirección. En ese caso, puede utilizar HttpServletRequest#getRequestURI() para obtener la solicitud actual URI:

String requestURI = request.getRequestURI(); 

Usted podría pasarlo como un parámetro de petición en el URL de redireccionamiento o almacenarlo en la sesión. Pasando como un parámetro de la petición es la más segura:

response.sendRedirect(request.getContextPath() + "/login.jsf?from=" + URLEncoder.encode(requestURI, "UTF-8")); 

En el frijol asociado a la página de inicio de sesión, se puede configurar como una propiedad administrada o un parámetro de vista. Supongamos que el bean tiene un alcance de vista para que pueda realizar agradables acciones/validaciones de ajax y similares. En ese caso, el parámetro de vista es la única manera ordenada:

<f:metadata> 
    <f:viewParam name="from" value="#{login.from}" /> 
</f:metadata> 

Entonces, cuando el verdadero inicio de sesión tiene éxito, puede redirigir a la URI por ExternalContext#redirect():

public void login() throws IOException { 
    // ... 

    FacesContext.getCurrentInstance().getExternalContext().redirect(from); 
} 

(si es necesario un suministro el objetivo predeterminado para el caso que from es null)

+0

¿me puede ayudar a cómo agregar su respuesta en mi código? 'externalContext.redirect (from);' Recibo un error en esta línea –

+0

Está disponible por 'FacesContext' de la forma habitual. He editado mi respuesta. – BalusC

+0

gracias por su respuesta, me ayuda mucho. ¿Puede mostrarme si quiero contar hacia atrás 3 segundos y luego solo comenzar a redireccionar a la página, cómo hacerlo? –

Cuestiones relacionadas