You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用SSL的Spring Boot应用重定向外部HTTP站点被自动转HTTPS如何解决

解决Spring Boot SSL站点重定向外部HTTP地址被自动转HTTPS的方案

根因说明

这个问题通常来自两个层面的配置:

  • Spring Boot全局SSL配置开启了HTTP强制跳转,会自动修改所有重定向地址的协议为HTTPS
  • 浏览器开启了HSTS缓存,会自动把你站点触发的所有跳转地址从HTTP升级为HTTPS

修复步骤

1. 调整SSL和HSTS配置

先在application配置文件中关闭自动HTTP跳转:

# application.properties
server.ssl.redirect-http-to-https=false

同时关闭Spring Security默认开启的HSTS响应头(测试阶段建议关闭,生产如果需要保留可以调整includeSubDomains和preload配置,不要作用于外部站点):

@Configuration
public class WebSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 你的其他安全规则不变
            .headers(header -> header
                .httpStrictTransportSecurity(hsts -> hsts.disable())
            );
        return http.build();
    }
}

调整后记得清空浏览器缓存,HSTS的默认缓存时间最长可达1年,不清缓存规则不会失效。

2. 手动构造重定向响应,避免Spring视图解析器修改地址

不要用redirect:前缀或者ModelAndView的重定向写法,这两种都会被Spring的视图解析器处理,可能被自动修改协议,改用直接构造ResponseEntity返回重定向响应,同时兼容返回视图的需求:

@GetMapping("/yourEndpoint")
public Object handleRequest(@RequestParam(required = false) String redirectKey) {
    // 逻辑判断:需要跳转外部地址时
    if (redirectKey != null) {
        // 从数据库读取原始地址,不要做任何协议替换
        String originTargetUrl = yourDao.getTargetUrl(redirectKey);
        return ResponseEntity.status(HttpStatus.FOUND)
                .header(HttpHeaders.LOCATION, originTargetUrl)
                .build();
    }
    // 不需要跳转时正常返回视图
    return new ModelAndView("yourHtmlView");
}

这种方式下你设置的Location响应头会原样返回给浏览器,不会被Spring的全局配置修改。

3. 排查全局拦截器的Header修改逻辑

如果修改后还是不生效,检查项目中所有的HandlerInterceptor、Filter、ResponseBodyAdvice实现,是否有全局替换响应头中Location字段协议的逻辑,加上例外规则:只有内部跳转地址才做协议替换,外部跳转地址保持原样即可。

内容的提问来源于stack exchange,提问作者Moshiur Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:45:03