Как мне надежно получить доступ к 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).

Другие вопросы по тегам