JSF перенаправляет с HTTPS на HTTP
У меня есть приложение на тестовом сервере, которое выполняется исключительно через https. Когда я перемещаюсь без перенаправления, он работает отлично:
Пример:
<p:menuitem value="#{msg.customerScreen}" url="/restrict/customer.xhtml" />
<p:menuitem value="#{msg.productScreen}" url="/restrict/product.xhtml" />
Но когда мне нужно перенаправить на другую страницу, он перенаправляет на http вместо https. При использовании через http, он работает отлично:
<p:commandLink ajax="false" action="/commerce/store.xhtml?faces-redirect=true">
<h:graphicImage library="images/BTN" name="btn_to_shop.gif"/>
</p:commandLink>
В качестве обходного пути я попытался восстановить URL:
<p:commandLink ajax="false" action="#{authorizerBean.getCompleteURL('/commerce/store.xhtml?faces-redirect=true')}">
<h:graphicImage library="images/BTN" name="btn_to_shop.gif"/>
</p:commandLink>
public String getCompleteURL(String page) {
try {
FacesContext ctxt = FacesContext.getCurrentInstance();
ExternalContext ext = ctxt.getExternalContext();
URI uri = new URI(ext.getRequestScheme(), null, ext.getRequestServerName(), ext.getRequestServerPort(), ext.getRequestContextPath(), null, null);
return uri.toASCIIString() + page;
} catch (URISyntaxException e) {
throw new FacesException(e);
}
}
Вызывается метод getCompleteURL, который возвращает корректность URL-адреса, но JSF не перенаправляет на новый URL-адрес.
JBoss получает HTTP-соединение. Кто управляет HTTPS - это Apache, который перенаправляет на JBoss:
<VirtualHost *:443>
...
ProxyPass / http://server:8080/
ProxyPassReverse / http://server:8080/
</VirtualHost>
Я бы предпочел решить эту проблему без использования getCompleteURL, но если это невозможно, пожалуйста, помогите мне с другими подходами.