gpt4 book ai didi

spring-mvc - 在 CloudFoundry 上使用 HTTPS 的 Spring Security

转载 作者:行者123 更新时间:2023-12-04 02:06:37 27 4
gpt4 key购买 nike

我尝试使用 spring security xml 中的以下配置访问 CloudFoundry 上的应用程序

<intercept-url pattern="/signup*" access="permitAll" requires-channel="https" />

但它给了我错误 此网页有重定向循环

但是,当我将其更改为 requires-channel="http" 时我可以正常看到我的页面。在这两种情况下,我都使用了 https在我的申请中。这是预期的行为吗?

最佳答案

首先,退一步,这个( https://johnpfield.wordpress.com/2014/09/10/configuring-ssltls-for-cloud-foundry/ )为问题的性质提供了很好的背景。

关键段落是

“The threat model here is that the entry point to the cloud is a high availability, secured proxy server.  Once the traffic traverses that perimeter, it is on a trusted subnet.  In fact, the actual  IP address and port number where the Tomcat application server are running are not visible from outside of the cloud. The only way to get an HTTP request to that port is to go via the secure proxy. This pattern is a well established best practice amongst security architecture practitioners.”



因此,我们可能不想要或不需要 SSL,但请继续阅读以了解在使用部署在 Cloud Foundry 上的 Spring Security 时如何避免 https 重定向问题。

您将有一个负载均衡器、HAProxy 或某种代理在您的 Cloud Foundry 安装边界终止 SSL。作为惯例,无论您使用什么,都应该配置为设置 X-Forwarded-For 和 X-Forwarded-Proto header 。请求 header “X-Forwarded-Proto”包含值 http 或 https,具体取决于原始请求,您需要将此 header 参数用于堆栈更下方的安全决策。

最干净的方法是在容器级别,以便 Spring Security 的行为与部署容器无关。配置它的一些典型选项如下

1) Tomcat

Tomcat 应该使用 RemoteIPValve 配置,如很好的描述 here

好消息是 Cloud Foundry 的 Java buildpack 已经为您执行此操作,如 here

2)Spring Boot(嵌入式Tomcat)

由于嵌入了 Tomcat,Java buildpack 中的 Tomcat 配置不会被激活(参见 buildpack Detection Criterion),因此需要一些内部 Spring Boot 配置。幸运的是,按照您对 Spring Boot 的期望进行配置非常简单,您可以按照 here 的说明打开 Tomcat 的 RemoteIPValve。通过简单地定义

server.tomcat.remote_ip_header=x-forwarded-for

server.tomcat.protocol_header=x-forwarded-proto



这两种方法都会导致 Tomcat 阀覆盖 ServletRequest.isSecure() 行为的相同结果,因此应用程序不知道任何代理的使用。请注意,仅当设置了“X-Forwarded-Proto”标题时才会使用该阀门。

或者,如果您真的想深入了解 Spring Security,则可以深入研究 Spring Security 的核心内容,如 here 所示。 .作为这项工作的一部分,在 https://github.com/BroadleafCommerce/BroadleafCommerce/issues/424 的评论中分享了一些关于如何通过 Servlet API 为其他容器(WebLogic、JBoss、Jetty、Glassfish)提供“X-Forwarded-Proto” header 的有用发现。

作为附加说明,CloudFlare 还可以充当 SSL 终止反向代理(这是通过 PWS 推荐的方法,正如所讨论的 here )和它 does确实转发相关标题。

引用

https://stackoverflow.com/a/28300485/752167

http://experts.hybris.com/answers/33612/view.html

https://github.com/cloudfoundry/java-buildpack/commit/540633bc932299ef4335fde16d4069349c66062e

https://support.run.pivotal.io/entries/24898367-Spring-security-with-https

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#howto-use-tomcat-behind-a-proxy-server

关于spring-mvc - 在 CloudFoundry 上使用 HTTPS 的 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211878/

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