代码之家  ›  专栏  ›  技术社区  ›  Stefan Falk

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

  •  0
  • Stefan Falk  · 技术社区  · 6 年前

    我不太确定这是否可行-我在网上找到的所有例子都是贬低的,例如财产 security.http.port 在今天的SpringBoot2中似乎不存在。

    我需要的是在两个端口上运行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 -我正在尝试接受Webhook调用,这些调用作为HTTP POST请求传入。

    1 回复  |  直到 6 年前
        1
  •  0
  •   wl.GIG    6 年前

    这是同时打开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;
        }
    }