Redirect 用户登录后如何重定向回用户期望访问页面?

Redirect 用户登录后如何重定向回用户期望访问页面?,redirect,login,jsf-2,Redirect,Login,Jsf 2,在用户登录之前,如果键入xxx.detail.jsf,它将重定向到登录页面让用户登录。这项任务已经完成了。在用户成功登录后,如何使其重定向回xxx.detail.jsf 我正在使用Eclipse Indigo、Tomcat 7和Mojarra 2.0.3。在重定向到登录页面时,需要保存当前请求URI。您可能正在使用过滤器执行登录检查和重定向。在这种情况下,您可以使用HttpServletRequest#getRequestURI()获取当前请求URI: String requestURI = r

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


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

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

String requestURI = request.getRequestURI();
您可以将其作为请求参数传递到重定向URL中,也可以将其存储在会话中。作为请求参数传递是最安全的:

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>

(如有必要,为
from
null
的情况提供默认目标)

您的意思当然不清楚。“如果type
xxx.detail.jsf
,它将重定向到登录页面”是什么意思?@Lion如果用户在登录前试图访问某个页面(例如:detail.jsf),系统会将用户重定向到登录页面,然后重定向回该页面(例如:detail.jsf)在用户成功登录到系统后,用户希望访问的。请您指导我如何在我的代码中添加您的答案<代码>外部上下文。重定向(从)我在这一行上得到错误它可以通过
FacesContext
以通常的方式获得。我已经编辑了我的答案。谢谢你的回答,它对我帮助很大。你能告诉我如果我想倒数3秒,然后只开始重定向回页面,怎么做吗?重定向到中间页面,在
@Ryan:
请求中有一个
。getQueryString()
更容易。
public void login() throws IOException {
    // ...

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