SpringBoot2.0支持https访问

595 阅读1分钟

这是我参与更文挑战的第17天,活动详情查看: 更文挑战

原创:Telami's Blog,欢迎分享,转载请保留出处。

前一阵子,不是新买了个域名嘛,dapideng.com,刚好最近准备搞一个小项目,就用springboot。以前更多时候都是把nginx放在前面,把请求在转发到对应的服务上,这次刚好有了新的服务器,还没配置nginx,索性就直接用java -jar 的方式启动了。

部署好了之后,咦?还没搞https。

其实在之前的博客中,也早有提及配置证书的事儿,只不过这次变成了springboot,它内置了tomcat容器,和把项目打包放在tomcat下面不太一样了。

证书使用阿里云的免费证书就可以,这里就不在赘述了。

申请下来之后,可以点击下载,这里我们选择的肯定是Tomcat。

也可以看一下对应的帮助文档

image.png

下载完证书之后,把它们放到resource目录下面,是以pfx结尾的文件。

在application.properties添加如下配置:

server.port=443
server.ssl.enabled=true
server.ssl.key-store=classpath:2046023_www.dapideng.com.pfx
server.ssl.key-store-password=c6503VGY
server.ssl.keyStoreType=PKCS12

在Application中注入以下两个Bean,这也是springboot更新至2.0版本之后,变更的部分。百度,或者谷歌出来的大部分配置都是基于1.5版本的。

@Bean
public Connector connector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(80);
    connector.setSecure(false);
    connector.setRedirectPort(443);
    return connector;
}

@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
        @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);
        }
    };
    tomcat.addAdditionalTomcatConnectors(connector);
    return tomcat;
}

执行maven命令,打包。

maven clean package

传到服务器上,执行命令,让服务在后台启动。

nohup java  -jar demo.jar &

dapideng

Done,perfect~  👏👏