如何配置Spring Boot 2在两个端口(HTTP和HTTPS)上运行Tomcat?

时间:2018-12-29 00:15:50

标签: spring spring-boot

我不太确定这是否可行-我在网上找到的所有示例均已弃用,例如Spring Boot 2中似乎不存在属性security.http.port

我需要的是一种在两个端口上运行Tomcat的方法,例如HTTPS为8443,HTTP为8080。

我还希望/api下的所有内容都需要HTTPS /api/webhooks(或至少/webhooks,因为我仍然可以根据需要更改端点)。

我在想像这样的事情:

@Override
public void configure(HttpSecurity http) throws Exception {

    http
            .requiresChannel()
                .antMatchers("/api/*/webhooks/**")
                    .requiresInsecure()
         .and()
            .requiresChannel()
                .antMatchers("/**")
                    .requiresSecure() 
                .and()
                    .exceptionHandling()
                .and()
                    .authorizeRequests()
                        .antMatchers("/api/*/public/**", "oauth/**")
                            .permitAll()
                        .antMatchers(HttpMethod.GET, "/*", "/assets/*")
                            .permitAll()
                        .antMatchers("/api/**")
                            .authenticated();
}

可以做到吗?这个问题有一个background-我正在尝试接受作为HTTP POST请求传入的webhook调用。

1 个答案:

答案 0 :(得分:0)

这是同时打开http和https的方式。

在您的JAVA环境下,生成一个SSL密钥

keytool -genkey -alias tomcat -dname "CN=Andy" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

并将文件复制到您的资源目录

您的属性应该是这样

# https port
server.port=8443
# http port
server.http.port=8080
# key path
server.ssl.key-store=classpath:keystore.p12
# your key password
server.ssl.key-store-password=mytest
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat

配置其他http端口

@Configuration
public class HttpConfig {
    @Value("${server.http.port}")
    private int httpPort;

    @Bean // (it only works for springboot 2.x)
    public ServletWebServerFactory servletContainer(){
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addAdditionalTomcatConnectors(createStanderConnecter());
        return factory;
    }

    private Connector createStanderConnecter(){
        Connector connector = 
        //new Connector("org.apache.coyote.http11.Http11NioProtocol");
        new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setPort(httpPort);
        return connector;
    }
}