在用户登录之前,如果键入xxx.detail.jsf
,它将重定向到登录页面,让用户登录。这项任务已经完成。如何在用户成功登录后将其重定向回xxx.detail.jsf
?
我正在使用Eclipse Indigo,Tomcat 7和Mojarra 2.0.3。
答案 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);
}
(如果需要,为from
为null
的情况提供默认目标)