gpt4 book ai didi

spring - 为什么 requiresSecure() 会导致 Spring Security 中的重定向循环?

转载 作者:行者123 更新时间:2023-12-04 18:05:37 25 4
gpt4 key购买 nike

我正在使用 Spring Boot v1.1.9.RELEASE 并将我的应用程序部署到 Heroku。我刚刚添加了一个 SSL 证书,如果我手动将 URL 更改为 HTTPS,它可以正常工作。

问题是登录后,Spring Security 切换回 HTTP。我已经阅读了这一点,发现添加以下内容会强制所有请求使用 HTTPS,这听起来正是我想要的:

.and().requiresChannel().anyRequest().requiresSecure()

但是,当我尝试这样做时,出现重定向循环错误。我不明白为什么服务器会不断重定向。我希望每个请求都是 HTTPS。因此,如果请求是 HTTP,上面的代码告诉服务器重定向到 HTTPS,这似乎有效。但随后它一遍又一遍地重试重定向。有谁知道它为什么这样做?日志似乎没有提供对行为的任何见解。

注意:我还在某处读到端口映射可能是罪魁祸首,但建议的解决方案是将端口映射设置为 80 到 443,据我所知这是默认设置。无论如何我都试过了,但没有任何区别。

最佳答案

最可能的原因是 HTTPS 连接未在 servlet 容器处终止,并且容器无法区分通过 HTTPS 或 HTTP 建立的连接。

检查是否isSecure当您通过 HTTPS 发出请求时,HttpServletRequest 上的方法返回 true。如果不是,那么您需要找到一些配置 Heroku 应用程序的方法,以允许容器区分不同之处。路由器很可能会设置一个 header ,例如 HTTP_X_FORWARDED_PROTO,容器可以配置为使用该 header 。您可以使用 RemoteIpValve 在 tomcat 中执行此操作但我不知道您在 Heroku 中对此有多少控制权。

关于spring - 为什么 requiresSecure() 会导致 Spring Security 中的重定向循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422087/

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