Spring MVC "redirect:"前缀总是重定向到 http——我如何让它保持在 https 上?

标签 spring spring-mvc

我自己解决了这个问题,但是我花了很长时间才发现这样一个简单的解决方案,我认为它应该在这里记录下来。

我有一个带有 InternalResourceViewResolver 的典型 Spring 3 MVC 设置:

<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>

我的 Controller 中有一个非常简单的处理程序方法,但在本示例中我对其进行了进一步简化:

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

问题是,如果我浏览到 https://my.domain.com/groups,我最终会访问 http://my.domain.com/ 重定向后。 (实际上,我的负载均衡器将所有 http 请求重定向到 https,但这只会导致打开此类警报的人出现多个“您正在离开/进入安全连接”类型的浏览器警报。)

所以问题是:当原始请求使用的是 https 时,如何让 spring 重定向到 https?

最佳答案

简短的回答是,将 InternalResourceViewResolver 的 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 兼容的重定向,但并非如此。我想这意味着它取决于您的 servlet 容器的实现(?);我在两个 Tomcat 中都观察到了这个问题和码头。)

关于Spring MVC "redirect:"前缀总是重定向到 http——我如何让它保持在 https 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401113/

相关文章:

java - 在后端使用 firebase + spring 登录

json - 将 Json 字符串解析为 Kotlin 对象会抛出 InvalidDefinitionException 和 Jackson

java - 在 spring-mvc 中转义特定字符串

java - Spring boot应用程序中的SecurityContext什么时候被清除?即使 api 调用完成后它也会被保留

java - SpringFramework ResponseBody 返回具有空值的对象

java - 如何解决此 "required a bean"错误

java - 无法为连接 URL '' : Tomcat + MySQL + Spring MVC 创建类 'null' 的 JDBC 驱动程序

css - Spring MVC 无法加载 CSS,出现错误 405

java - Spring 事务注解

Spring MVC : bind hash map with same/different value depending on user input