Как перенаправить обратно на страницу желаний пользователя после входа в систему? - PullRequest
7 голосов
/ 06 января 2012

Перед входом пользователя, если ввести xxx.detail.jsf, он будет перенаправлен на страницу входа, чтобы пользователь мог войти.Эта задача уже выполнена.Как я могу сделать это, чтобы перенаправить обратно на xxx.detail.jsf после успешного входа пользователя?

Я использую Eclipse Indigo, Tomcat 7 и Mojarra 2.0.3.

1 Ответ

11 голосов
/ 06 января 2012

В момент, когда вы перенаправляете на страницу входа в систему, вам нужно сохранить текущий 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)

...