https 在 swisscom CloudFoundry 上无法正常工作
https not working as expected on swisscom CloudFoundry
我有一个非常简单的 spring 启动应用程序,它作为一个控制器:
@RestController
public class HomeController {
@GetMapping(path = "/")
public String getHome() {
return "Hello world";
}
}
和以下安全配置以强制执行 https:
@Configuration
public class SslWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// require https!
http.requiresChannel().anyRequest().requiresSecure();
}
}
application.properties
看起来像这样:
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
maven 依赖项是:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
manifest.mf
看起来像这样:
applications:
- name: jt-demo
memory: 1G
instances: 1
path: ./target/demo.jar
buildpacks:
- https://github.com/cloudfoundry/java-buildpack#v4.17.2
env:
JAVA_OPTS: -Djava.security.egd=file:///dev/urandom
JBP_CONFIG_OPEN_JDK_JRE: '{jre: { version: 11.+ }}'
我通过以下命令在两个不同的 cloudfoundry 提供商(pivotal 和 swisscom)上安装应用程序:cf push jt-demo -f manifest.yml
当我在 https://run.pivotal.io, and access it via https it works as expected and the browser shows me the expected "Hello world". But when I run it on the swisscom developer application cloud (https://developer.swisscom.com 上 运行 这个应用程序时,我得到 ERR_TOO_MANY_REDIRECTS(很多 302)。
这两个 cloudfoundry 环境似乎没有以相同的方式处理 HTTPS。
我知道关键 运行cf api 版本 2.138.0 和 swisscom 有 2.136.0 - 但我不认为这是原因。
如何修复 swisscom dev 的 app/configuration?
我终于在这里找到了问题的答案
https://docs.developer.swisscom.com/devguide-sc/buildpacks/java/caveats.html
swisscom还要配置server.tomcat.internal-proxies
有点意外...
我有一个非常简单的 spring 启动应用程序,它作为一个控制器:
@RestController
public class HomeController {
@GetMapping(path = "/")
public String getHome() {
return "Hello world";
}
}
和以下安全配置以强制执行 https:
@Configuration
public class SslWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// require https!
http.requiresChannel().anyRequest().requiresSecure();
}
}
application.properties
看起来像这样:
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
maven 依赖项是:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
manifest.mf
看起来像这样:
applications:
- name: jt-demo
memory: 1G
instances: 1
path: ./target/demo.jar
buildpacks:
- https://github.com/cloudfoundry/java-buildpack#v4.17.2
env:
JAVA_OPTS: -Djava.security.egd=file:///dev/urandom
JBP_CONFIG_OPEN_JDK_JRE: '{jre: { version: 11.+ }}'
我通过以下命令在两个不同的 cloudfoundry 提供商(pivotal 和 swisscom)上安装应用程序:cf push jt-demo -f manifest.yml
当我在 https://run.pivotal.io, and access it via https it works as expected and the browser shows me the expected "Hello world". But when I run it on the swisscom developer application cloud (https://developer.swisscom.com 上 运行 这个应用程序时,我得到 ERR_TOO_MANY_REDIRECTS(很多 302)。
这两个 cloudfoundry 环境似乎没有以相同的方式处理 HTTPS。
我知道关键 运行cf api 版本 2.138.0 和 swisscom 有 2.136.0 - 但我不认为这是原因。
如何修复 swisscom dev 的 app/configuration?
我终于在这里找到了问题的答案
https://docs.developer.swisscom.com/devguide-sc/buildpacks/java/caveats.html
swisscom还要配置server.tomcat.internal-proxies
有点意外...