记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS

记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第1张图片

因为公司买了新的服务器,需要把项目部署到新服务器上且支持HTTPS,经过网上搜索,终于搞定,现记录下来。

配置HTTP

1.生成证书

使用jdk自带的keytool.exe生成证书(因为只是用来前后端接口的访问,所以用自生成的证书就行)

在jdk的bin目录下远行cmd

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore

命令中 -alias 设置别名,-keyalg 设置加密算法,-keystore 设置证书文件地址。

接着需要输入秘钥库口令,这个后面是配置的时候需要用到。
记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第2张图片记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第3张图片
输入完密钥后按提示填写就行,我这里随意填写的,填写完后就会在bin目录下看到server.keystore文件,到这里证书就已经生成好了。
记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第4张图片

2.配置SSL

把server.keystore文件放到项目的resources下面并配置application.yml
记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第5张图片

server:
  port: 443
  ssl:
    key-store: classpath:server.keystore
    key-store-password: 123456
    key-store-type: JKS
    key-alias: tomcat
    enabled: true

port:访问端口
key-store:设定文件存放路径
key-store-password:是生成证书时填写的密钥
key-store-type:设定key store的类型
key-alias:设定key store中key的别名
enabled:是否开启ssl,默认: true

3.配置HTTP转HTTPS

这个也可以不用配置,配置这个的话,调用HTTP时链接会自动跳转到HTTPS
我这里是Spring Boot2.0版本的配置,不同的版本配置自动跳转是不一样的

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConnectorConfig {
    /**
     *@Despription HTTP自动转向HTTPS 设置2
     *@Params
     *@return
     *@Time 2018/8/29
     *@Modify
     */
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        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;
    }

    /**
     *@Despription HTTP自动转向HTTPS 设置1
     *@Params
     *@return
     *@Time 2018/8/29
     *@Modify
     */
    @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;
    }
}

到这里就已经配置好了!我们先来看看本地能不能访问。

远行项目时,如果有下面这条日志,就表示自动转HTTPS配置成功了。
在这里插入图片描述
然后页面访问后台的get测试接口
记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第6张图片
记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS_第7张图片
有点随意没有设置编码。。。所以页面是乱码,重点是访问可以了!

然后用maven打包成jar包,扔到服务器发布就好了。

nohup java -jar eladmin-system-2.3.jar > loge.out &

eladmin-system-2.3.jar:是项目jar包的路径
loge.out:日志输出到该文件中,如果没有会创建一个
&:后台远行,就算关闭窗口也不会停止远行

到这里就已经完成了!!!如果发布到服务器上,无法访问,可能是因为端口没有开放的问题。因为我就碰到了这个问题,然后白白浪费了时间加班。。。这是我的第一篇文章,为了记录一点知识。

你可能感兴趣的:(记一次Spring Boot项目部署发布,并配置SSL同时支持HTTP和HTTPS)