SpringBoot 配置https+实现http访问自动转https访问

发布正式环境涉及到域名的话,好像不是这个操作。

一、使用jdk自带的keytools创建证书

//打开cmd,输入命令
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore 

输入密钥库口令:pagegle
再次输入新口令:pagegle
您的名字与姓氏是什么?
  [Unknown]:  lyg
您的组织单位名称是什么?
  [Unknown]:  lyg
您的组织名称是什么?
  [Unknown]:  lyg
您所在的城市或区域名称是什么?
  [Unknown]:  Nanjing
您所在的省/市/自治区名称是什么?
  [Unknown]:  Nanjing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  china
CN=kaibowang, OU=yuxuelian, O=yuxuelian, L=chengdu, ST=chengdushi, C=china是否正确?
  [否]:  y

输入  的密钥口令
        (如果和密钥库口令相同, 按回车):
再次输入新口令:

二、创建完成后,可在用户根目录查看生成的keystore文件。将上一步生成的keystone文件复制到项目的根目录,在application.properties添加如下配置

server:
  port: 8781 # 443  https的默认访问端口,
  #Https 配置   HttpsConfig 打开
  ssl:
    #你生成的证书名字
    key-store: https.keystore
    #密钥库密码
    key-store-password: pagegle
    key-store-type: JKS
    key-alias: tomcat

三、https已配置好,可以访问了。下面http访问自动转https。

package com.jsyl.stfw.config;

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 HttpsConfig {

    @Bean
    public Connector connector(){
        Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8781);
        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;
    }

}

 

你可能感兴趣的:(后端)