JSF przekierowuje z HTTPS do HTTP
Mam aplikację na serwerze testowym wykonywaną wyłącznie na https. Gdy nawiguję bez przekierowania, działa idealnie:
Przykład:
<p:menuitem value="#{msg.customerScreen}" url="/restrict/customer.xhtml" />
<p:menuitem value="#{msg.productScreen}" url="/restrict/product.xhtml" />
Ale kiedy muszę przekierować na inną stronę, przekierowuje do http zamiast https. Podczas korzystania z http działa doskonale:
<p:commandLink ajax="false" action="/commerce/store.xhtml?faces-redirect=true">
<h:graphicImage library="images/BTN" name="btn_to_shop.gif"/>
</p:commandLink>
Jako obejście próbowałem zrekonstruować adres 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);
}
}
Metoda getCompleteURL jest wywoływana i zwraca adres URL poprawnie, ale JSF nie przekierowuje do nowego adresu URL.
JBoss odbiera połączenie HTTP. Kto zarządza HTTPS to Apache, który przekierowuje do JBoss:
<VirtualHost *:443>
...
ProxyPass / http://server:8080/
ProxyPassReverse / http://server:8080/
</VirtualHost>
Wolałbym rozwiązać ten problem bez użycia getCompleteURL, ale jeśli nie jest to możliwe, pomóż mi w innych podejściach.