由于SpringBoot项目默认是使用http发送的请求,不支持HTTPS请求,而发送HTTPS请求需要需要使用数字证书,虽然各大服务云商都有,但是那个是收费使用的,生产环境如果需要,肯定需要在正规地方购买,当然我们本地测试就不需要那么购买了,可以使用java自带的生成数字证书。
进入jdk的安装目录,bin文件夹下,打开命令窗口输入以下命令生成数字证书:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:/javasign.p12 -validity 365 # 或者 keytool -importkeystore -srckeystore D:/javasign.p12 -destkeystore D:/javasign.p12 -deststoretype pkcs12 复制代码
命令含义如下:
 
 生成以下数字证书。
 
 接下来我们需要在项目中引入 https。
将上面生成的 javaboy.p12 拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.yml中添加如下配置:
server:
  port: 8090
  ssl:
    key-alias: classpath:javasign.p12
    key-store: tomcathttps
    key-store-password: 123456
复制代码 
 参数说明
在浏览器输入‘ https://localhost:8080/app/index ’ ,会出现以下页面,点击高级--继续
 
 最终可以使用HTTPS访问
 
 但是当我们使用HTTP访问的时候,就会出现问题。
 
 解决办法,添加配置文件。
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 TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    @Bean
    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}
复制代码 
  通过这段配置,访问 http://localhost:8081/app/index 的时候系统会自动重定向到 https://localhost:8080/app/index 这个地址上。