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')}?
The markup seemed to have the correct URI
/tenant/testTenant/Newssince there was aSUBSTITUTErule in the apache proxy to remove/tenant/testTenant.The ajax was not correct, since the substitution was only active for
text/htmlfiles and not for AJAXtext/xmlfiles.Checking the
actionattribute 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-299688452So there was no error in the
@WebFiltereither since it showed the same result as the markup (which just was substituted).