Как мне надежно получить доступ к HttpServletRequest в jspx, когда он находится за прокси-сервером?
У меня есть JSPX, который должен знать текущий HttpServletRequest
"s getServerName()
, JSPX может получить это с #{mybean.serverName}
от его боба, вот так:
public String getServerName() {
HttpServletRequest request = (HttpServletRequest) FacesInstance.getCurrentInstance().getExternalContent().getRequest();
return request.getServerName();
}
Тем не менее, когда это подается за прокси (Apache с mod_proxy), getServerName()
будет иногда возвращать имя хоста узла вместо имени хоста внешнего интерфейса. В других случаях это работает правильно.
Простой JSP с <% request.getServerName(); %>
однако всегда будет возвращать имя хоста внешнего интерфейса.
В чем проблема с FacesInstance? HttpServletRequest
? Есть ли способ получить "реальный" объект запроса?
1 ответ
В чем проблема с HttpServletRequest от FacesContext?
Вы получаете базовый запрос реализации (который является API сервлета). Это не имеет ничего общего с JSF, так как вы покидаете API для вызова объекта, предоставленного контейнером сервлету JSF.
JSP request
Объект также javax.servlet.ServletRequest
; они могут быть одним и тем же объектом.
Существует вероятность того, что запрос будет упакован (например, HttpServletRequestWrapper
), но трудно понять, что можно получить, изменив возвращаемое значение из getServerName()
,
Я подозреваю, что способ разрешения имени хоста имеет побочный эффект. Я хотел бы посмотреть, как реализация getServerName()
работает на вашем сервере.
К вашему сведению: вы должны иметь возможность ссылаться на значение без управляемого компонента. EL выражение ${pageContext.request.serverName}
(не проверено) должно вернуть значение (pageContext
является неявной переменной в JSP).