用户登录后如何重定向回用户所需的访问页面?

时间:2012-01-06 01:42:54

标签: redirect login jsf-2

在用户登录之前,如果键入xxx.detail.jsf,它将重定向到登录页面,让用户登录。这项任务已经完成。如何在用户成功登录后将其重定向回xxx.detail.jsf

我正在使用Eclipse Indigo,Tomcat 7和Mojarra 2.0.3。

1 个答案:

答案 0 :(得分:11)

当您重定向到登录页面时,您需要保存当前请求URI。您可能正在使用Filter来执行登录检查和重定向。在这种情况下,您可以使用HttpServletRequest#getRequestURI()获取当前请求URI:

String requestURI = request.getRequestURI();

您可以将其作为重定向网址中的请求参数传递,也可以将其存储在会话中。作为请求参数传递是最安全的:

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

在与登录页面关联的bean中,您可以将其设置为托管属性或视图参数。让我们假设bean是视图作用域,以便您可以执行不错的ajax操作/验证等。在这种情况下,view参数是唯一巧妙的方式:

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

然后,当真正的登录成功时,您可以通过ExternalContext#redirect()重定向到该URI:

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

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

(如果需要,为fromnull的情况提供默认目标)