gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:02:49 24 4
gpt4 key购买 nike

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

我有一个带有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com