abi*_*eez 3 spring-mvc spring-security cloud-foundry
我尝试使用spring security xml中的以下配置在CloudFoundry上访问我的应用程序
<intercept-url pattern="/signup*" access="permitAll" requires-channel="https" />
Run Code Online (Sandbox Code Playgroud)
但它给了我错误这个网页有一个重定向循环
但是当我改变它时,requires-channel="http"我可以正常看到我的页面.在我用于https我的应用程序的两种情况下.这是预期的行为吗?
首先,退一步,这(https://johnpfield.wordpress.com/2014/09/10/configuring-ssltls-for-cloud-foundry/)为问题的本质提供了良好的背景.
关键段落是
"这里的威胁模型是云的入口点是高可用性,安全的代理服务器.一旦流量穿过该周边,它就在可信子网上.实际上,从云外部看不到运行Tomcat应用程序服务器的实际IP地址和端口号.获取该端口的HTTP请求的唯一方法是通过安全代理.这种模式在安全架构从业者中是一种成熟的最佳实践."
因此,我们可能不希望或一直需要SSL,但请继续阅读以了解如何在使用Cloud Foundry上部署的Spring Security时避免https重定向问题.
您将在Cloud Foundry安装的边界处拥有负载均衡器,HAProxy或某种代理终止SSL.作为惯例,无论您使用什么,都应配置为设置X-Forwarded-For和X-Forwarded-Proto标头.请求标头"X-Forwarded-Proto"包含值http或https,具体取决于原始请求,您需要使用此标头参数进一步在堆栈中进行安全性决策.
最简单的方法是在容器级别,以便Spring Security的行为与部署容器无关.配置它的一些典型选项如下
Tomcat的应用RemoteIPValve被配置为很好地描述这里
好消息是,在Java buildpack的Cloud Foundry上已经这样做了你所看到这里
由于嵌入了Tomcat,因此不会激活Java buildpack中的Tomcat配置(请参阅buildpack 检测标准),因此需要一些内部Spring Boot配置.幸运的是,这是非常容易的配置,你会用Spring引导预期,你可以在Tomcat的RemoteIPValve作为解释的开关在这里通过简单地定义
server.tomcat.remote_ip_header = X-转发换
server.tomcat.protocol_header = X-转发-原
这两种方法都会导致Tomcat阀门的相同结果覆盖ServletRequest.isSecure()行为,因此应用程序不知道任何代理的使用情况.请注意,只有在设置了"X-Forwarded-Proto"标题时才会使用该阀门.
或者,如果你真的想要去低级别的可以挖成的Spring Security的胆量,这表现在这里.作为这项工作的一部分,有一些有用的发现,如何通过Servlet API为https://的评论共享的其他容器(WebLogic,JBoss,Jetty,Glassfish)提供"X-Forwarded-Proto"标头.github.com/BroadleafCommerce/BroadleafCommerce/issues/424
作为附加的注释,CloudFlare的也可以作为SSL终止反向代理(这通过PWS是推荐的方法,因为讨论这里),它确实确实提出了相关的报头.
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
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |