Я решил это сам, но я потратил так много времени, обнаружив такое простое решение, я полагал, что оно имело право быть зарегистрированным здесь.
У меня есть типичная установка 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, когда это - то, что использовал исходный запрос?
Короткий ответ: установите свойство 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.)
.