Bluemix在Spring Boot应用程序上强制使用HTTPS

时间:2016-08-17 19:41:04

标签: ssl spring-security spring-boot ibm-cloud cloudfoundry

我有一个Spring Boot应用程序,它作为CF应用程序在Bluemix上推送。 它与http协议一起高效工作。但是,如果我试图强制https,我会收到502错误。

我有:

@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.requiresChannel().anyRequest().requiresSecure();
        //http.csrf().disable();
  }

}

我有一个包含这些条目的application.properties文件:

server.ssl.key-store = classpath:**.jks
server.ssl.key-store-password = *******
server.ssl.key-password = ******

server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto

我知道Bluemix执行SSL终止;事实上,它正确设置x-forwarded-proto和x-forwarded-for。我寻找像12这样的解决方案,但没有运气。

然后按照this article中的建议尝试了以下解决方案,但收到了一个重定向循环:

@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory(){
    return new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };
}

我的方法是什么?非常感谢您提供给我的任何提示/建议

1 个答案:

答案 0 :(得分:1)

为了社区的利益,很高兴看到Rob的评论被接受为答案。 Rob,如果您希望改为接受,请随意添加自己的答案。

  

Tomcat未将x-forwarded标头检测为可信代理。尝试设置server.tomcat.internal-proxies =。*和logging.level.org.apache.catalina.valves = DEBUG