gpt4 book ai didi

spring-security - 关键 CloudFoundry : Enforcing HTTPS (SSL)

转载 作者:行者123 更新时间:2023-12-01 23:13:58 28 4
gpt4 key购买 nike

我想为要托管在 Pivotal CloudFoundry 上的 Spring Boot 应用程序强制执行 HTTPS,我想现在大多数应用程序都需要这样做。据我所知,常用的方法是使用

http.requiresChannel().anyRequest().requiresSecure()

但这会导致重定向循环。原因,正如我通过引用类似 this 的帖子所理解的那样,是负载均衡器将 https 转换回 http。这意味着,它必须在负载均衡器级别完成。

那么,是否有一些选项可以告诉 CloudFoundry 为应用程序强制执行 HTTPS?如果不是,这不应该是一个功能请求吗?而且,今天有什么好方法可以做到这一点?

更新:Cloud Foundry 或 Spring Security 团队的任何人看到这篇文章了吗?我认为这是在 CloudFoundry 上托管应用程序之前的一项基本功能。谷歌搜索,我没有找到简单的解决方案,只能告诉用户使用 https 而不是 http。但是,即使我这么说,当匿名用户试图访问受限页面时,Spring Security 也会将他重定向回 http 登录页面。

更新 2:当然,正如许多答案所暗示的那样,我们有 x-forwarded-proto header ,但我不知道自定义它有多难使用 Spring Security 的特性。然后,我们还有其他的东西,比如 Spring Social 与 Spring Security 的集成,我也在那里遇到了一个问题。我认为要么 Spring Security 和大量其他框架需要提出使用 x-forwarded-proto 的解决方案,要么 CloudFoundry 需要某种方式来透明地处理它。我认为后者会方便得多。

最佳答案

通常,当您将 WAR 文件推送到 Cloud Foundry 时,Java 构建包会获取该文件并将其部署到 Tomcat。这非常有效,因为 Java 构建包可以为您配置 Tomcat 并自动包含一个 RemoteIpValve,它采用 x-forwarded-* header 并重新配置您的请求对象。

如果您使用 Spring Boot 并作为 JAR 文件推送,您的应用程序中将嵌入 Tomcat。因为 Tomcat 嵌入在您的应用程序中,所以 Java 构建包无法为环境配置它(即它无法配置 RemoteIpValve)。这意味着您需要对其进行配置。可以找到使用 Spring Boot 执行此操作的说明 here .

如果您将 Web 应用程序部署为 JAR 文件但使用不同的框架或嵌入式容器,则需要查找您的框架/容器的文档,看看它是否自动处理 x-forwarded -* 标题。如果没有,您将需要手动处理它,就像其他答案所建议的那样。

关于spring-security - 关键 CloudFoundry : Enforcing HTTPS (SSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227583/

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