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/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).