Spring MVC “перенаправление”: префикс всегда перенаправляет к http — как я заставляю его остаться на https?

Я решил это сам, но я потратил так много времени, обнаружив такое простое решение, я полагал, что оно имело право быть зарегистрированным здесь.

У меня есть типичная установка Spring 3 MVC с InternalResourceViewResolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/" />
  <property name="suffix" value=".jsp" />
</bean>

У меня есть довольно простой метод обработчиков в моем контроллере, но я упростил его еще больше для этого примера:

@RequestMapping("/groups")
public String selectGroup() {
    return "redirect:/";
}

Проблема, если я просматриваю к https://my.domain.com/groups, Я заканчиваю в http://my.domain.com/ после перенаправления. (В действительности моя подсистема балансировки нагрузки перенаправляет все запросы HTTP к https, но это правые дела, несколько предупреждений браузера типа "Вы уезжаете/вводите безопасное соединение" для людей, которым включили такие предупреждения.)

Таким образом, вопрос: как каждый заставляет пружину перенаправлять к https, когда это - то, что использовал исходный запрос?

52
задан super_aardvark 3 August 2010 в 11:01
поделиться

1 ответ

Короткий ответ: установите свойство InternalResourceViewResolver's redirectHttp10Compatible в false:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/" />
  <property name="suffix" value=".jsp" />
  <property name="redirectHttp10Compatible" value="false" />
</bean>

Вы можете сделать это на основе каждого запроса, вместо этого заставив ваш метод обработчика возвращать View вместо String, и создать RedirectView самостоятельно, и вызвать setHttp10Compatible(false).

(Оказалось, что виной всему HttpServletResponse.sendRedirect, который RedirectView использует для HTTP 1.0 совместимых перенаправлений, но не в других случаях. Полагаю, это означает, что проблема зависит от реализации вашего контейнера сервлетов (?); я наблюдал проблему и в Tomcat, и в Jetty.)

.
52
ответ дан 7 November 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: