Search code examples
apachejsfglassfishocpsoft-rewrite

JSF - forwarded URL with proxy lost


When using an apache proxy against our glassfish 5 the forwarded URL data are lost.

This happens within our login @WebFilter and can be reproduced using a simple ajax page update with an <h:outputText value="forward.request_uri: #{requestScope['javax.servlet.forward.request_uri']}" /> .

Testcase

This example access URL http://localhost:3080/News

This URL represents our testTenant and is proxied to: /tenant/testTenant/News which is the rewritten version of /sites/tenant/news.xhtml?tenant=testTentant using OCPSoft library.

The request headers host, x-forwarded-host are set correctly to http://localhost:3080 on the ajax checking #{headerValues}.

GET request correct in Markup

forward.request_uri: /News

AJAX request wrong in Markup

forward.request_uri: /tenant/testTenant/News

WebFilter wrong in Java

Logging this inside the @WebFilter, even at the first GET request using request.getAttribute("javax.servlet.forward.request_uri") will give same wrong URI.

What can be the reason this is lost?

Is there a differene between request.getAttribute("javax.servlet.forward.request_uri") and #{requestScoped['request.getAttribute("javax.servlet.forward.request_uri')}?


Solution

  • The markup seemed to have the correct URI /tenant/testTenant/News since there was a SUBSTITUTE rule in the apache proxy to remove /tenant/testTenant.

    The ajax was not correct, since the substitution was only active for text/html files and not for AJAX text/xml files.

    Checking the action attribute of the surrounding form after the ajax request showed it was not rewritten which is a sign of a bad proxy config. Thanks to @BalusC response at: https://github.com/omnifaces/omnifaces/issues/370#issuecomment-299688452

    So there was no error in the @WebFilter either since it showed the same result as the markup (which just was substituted).