Переход с http на https в Glassfish 3.1.1 - PullRequest
1 голос
/ 15 ноября 2011

Я использую Glassfish 3.1.1 и JSF 2.0:

У меня есть следующий код:

public String doLoginOrCC() {

    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

    this.flightNumber = request.getParameter("flightNumber");

    if (request.getRemoteUser() == null) {
        return "login.xhtml";
    } else {
        return "https://" + request.getLocalAddr() + ":8181" + request.getContextPath() + "/bookSeat.xhtml";
    }

}

Если пользователь не вошел в систему, перейдите в login.xhtml.

Если пользователь вошел в систему, перейдите на https://localhost:8181/APP/bookSeat.xhtml

    Unable to find matching navigation case with from-view-id '/flightInfo.xhtml' for action '#{bookSeatController.doLoginOrCC}' with outcome 'https://127.0.0.1:8181/PlaneTicketProgram5-war/bookSeat.xhtml' 

Нужно ли добавлять правило навигации в мой файлface-config.xml.

Если это так, как бы я написал правило навигации?

1 Ответ

0 голосов
/ 16 ноября 2011

Вы не можете изменить схему HTTP в случае навигации. Навигационный кейс делает в основном форвард. Вам нужно отправить перенаправление HTTP вместо этого. Для этого вы можете использовать ExternalContext#redirect().

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect("https://" + request.getLocalAddr() + ":8181" + request.getContextPath() + "/bookSeat.xhtml");

Вам нужно только добавить throws IOException к методу действия компонента.


Не связано с конкретной проблемой, почему вы не входите через HTTPS? Ваша проблема предполагает, что вы входите через HTTP, который, таким образом, отправляет имя пользователя / пароль в незашифрованном виде по сети. Кроме того, следует максимально избегать извлечения необработанного API сервлета из-под обложек JSF. Вы можете получить параметры HTTP-запроса по ExternalContext#getRequestParameterMap() или, что лучше, по @ManagedProperty или <f:viewParam>. Вы можете получить удаленного пользователя по ExternalContext#getRemoteUser().

...