zoukankan      html  css  js  c++  java
  • Spring Boot 支持 HTTPS 如此简单,So easy!

    640?wx_fmt=jpeg

    这里讲的是 Spring Boot 内嵌式 Server 打 jar 包运行的方式,打 WAR 包部署的就不存在要 Spring Boot 支持 HTTPS 了,需要去外部对应的 Server 配置。

    你所需具备的基础

    更多请在Java技术栈微信公众号后台回复关键字:boot。

    支持 HTTPS

    Spring Boot 配置 SSL 很简单,只需要通过一系列的 server.ssl.* 参数即可完成配置,如下所示。

    application.properties 配置文件参考配置:

    server.port=8443server.ssl.protocol=TLSserver.ssl.key-store=classpath:javastack.keystoreserver.ssl.key-store-password=javastackserver.ssl.key-store-type=JKS8443
    server.ssl.protocol=TLS
    server.ssl.key-store=classpath:javastack.keystore
    server.ssl.key-store-password=javastack
    server.ssl.key-store-type=JKS

    如何在本地测试创建证书请参考这篇文章《一分钟开启Tomcat https支持》,把生成完的证书复制到 Spring Boot 项目中的 resources 目录即可。

    这边只是提供了一个 SSL 单向验证的演示,更多 SSL 参数配置如下。

    server.ssl.ciphers= # Supported SSL ciphers.server.ssl.client-auth= # Whether client authentication is wanted ("want") or needed ("need"). Requires a trust store.server.ssl.enabled= # Enable SSL support.server.ssl.enabled-protocols= # Enabled SSL protocols.server.ssl.key-alias= # Alias that identifies the key in the key store.server.ssl.key-password= # Password used to access the key in the key store.server.ssl.key-store= # Path to the key store that holds the SSL certificate (typically a jks file).server.ssl.key-store-password= # Password used to access the key store.server.ssl.key-store-provider= # Provider for the key store.server.ssl.key-store-type= # Type of the key store.server.ssl.protocol=TLS # SSL protocol to use.server.ssl.trust-store= # Trust store that holds SSL certificates.server.ssl.trust-store-password= # Password used to access the trust store.server.ssl.trust-store-provider= # Provider for the trust store.server.ssl.trust-store-type= # Type of the trust store.
    server.ssl.client-auth= # Whether client authentication is wanted ("want") or needed ("need"). Requires a trust store.
    server.ssl.enabled= # Enable SSL support.
    server.ssl.enabled-protocols= # Enabled SSL protocols.
    server.ssl.key-alias# Alias that identifies the key in the key store.
    server.ssl.key-password= # Password used to access the key in the key store.
    server.ssl.key-store= # Path to the key store that holds the SSL certificate (typically a jks file).
    server.ssl.key-store-password= # Password used to access the key store.
    server.ssl.key-store-provider= # Provider for the key store.
    server.ssl.key-store-type= # Type of the key store.
    server.ssl.protocol=TLS # SSL protocol to use.
    server.ssl.trust-store= # Trust store that holds SSL certificates.
    server.ssl.trust-store-password= # Password used to access the trust store.
    server.ssl.trust-store-provider= # Provider for the trust store.
    server.ssl.trust-store-type= # Type of the trust store.


    参数对应的类:org.springframework.boot.web.server.Ssl

    上面的例子配置后就能开启 HTTPS 了,默认的 HTTP 协议就不再支持了,Spring Boot 不支持以配置文件配置的方式同时支持 HTTP 和 HTTPS。

    如何同时支持?

    如果你需要同时支持 HTTP 和 HTTPS 这两个协议,就需要把另外一个协议用程序化的方式来配置。

    因为通过程序的方式配置 HTTP 协议更加简单一点,所以,Spring Boot 推荐的做法是把 HTTPS 配置在配置文件,HTTP 通过程序来配置。

    来,下面示例就是通过程序的方式来额外支持 HTTP 协议。

    @SpringBootApplicationpublic class JavastackApplication {    @Bean    public ServletWebServerFactory servletContainer() {        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();        tomcat.addAdditionalTomcatConnectors(createStandardConnector());        return tomcat;    }    private Connector createStandardConnector() {        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");        connector.setPort(8080);        return connector;    }    public static void main(String[] args) {        SpringApplication.run(JavastackApplication.class, args);    }}
    public class JavastackApplication {

        @Bean
        public ServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
            tomcat.addAdditionalTomcatConnectors(createStandardConnector());
            return tomcat;
        }

        private Connector createStandardConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setPort(8080);
            return connector;
        }

        public static void main(String[] args) {
            SpringApplication.run(JavastackApplication.class, args);
        }

    }

    启动 Spring Boot 之后就会看到下面的同时支持两个协议日志。

    Tomcat started on port(s): 8443 (https) 8080 (http) with context path '/'on port(s): 8443 (https) 8080 (http) with context path '/'

    Spring Boot 支持 HTTPS 如此简单,开发现在把运维的事都做了……

    好了,今天的分享就到这里,更多 Spring Boot 文章正在撰写中,关注Java技术栈微信公众号获取第一时间推送。

    Java技术栈微信公众号后台回复:boot,还能获取栈长整理的往期 Spring Boot 教程,都是实战干货,以下仅为部分预览。

    最近干货分享

    Spring Boot 面试,一个问题就干趴下了!

    IntelliJ IDEA 快捷键终极大全,速度收藏!

    图解 Java 垃圾回收机制,写得非常好!

    如何写出让同事无法维护的代码?

    分享一份Java架构师学习资料

    640

    点击「阅读原文」一起搞技术,爽~

  • 相关阅读:
    Linkedin工程师是如何优化他们的Java代码的
    如何调试 Android 上 HTTP(S) 流量
    Facebook工程师是如何改进他们Android客户端的
    modified: xxx(modified content, untracked content)
    在Android工程中加入AIDL文件时,gen目录生成的文件报错-问题解决
    Ubuntu14.04LTS下使用eclipse搭建Cocos2d-x的Android环境
    Ubuntu Linux下安装Oracle JDK
    查看Android源码版本
    Ubuntu Linux下安装Oracle JDK
    Android Initializing a Build Environment
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952195.html
Copyright © 2011-2022 走看看