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
)
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
@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. –