В момент, когда вы перенаправляете на страницу входа в систему, вам нужно сохранить текущий URI запроса. Скорее всего, вы используете Filter
для проверки входа и перенаправления. В этом случае вы можете использовать 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>
Затем, после успешного входа в систему, вы можете перенаправить на этот URI с помощью ExternalContext#redirect()
:
public void login() throws IOException {
// ...
FacesContext.getCurrentInstance().getExternalContext().redirect(from);
}
(при необходимости укажите цель по умолчанию для случая, когда from
равно null
)