今天要和大家聊的是在 Spring Boot 项目中,如何开启 https 配置,为我们的接口保驾护航。
需要一个证书,可以自己生成或者购买
1、自己生成
利用终端工具生产证书的命令
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore /Users/mac/Desktop/cloudFile/sslhttps.p12 -validity 365
将上面生成的 sslhttps.p12 拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.yml 中添加如下配置:
server:
port: 8443
ssl:
key-store: classpath:sslhttps.p12
key-alias: tomcathttps
key-store-password: 123456
其中:
key-store表示密钥文件名。
key-alias表示密钥别名。
key-store-password就是在cmd命令执行过程中输入的密码。
请求转发
考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上。
具体配置如下:
package com.austin.springboothttps.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName TomcatConfig
* @Author liuqh
* @Date 2019-08-24 17:30
* @Description
*/
@Configuration
public class TomcatConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
// 添加http
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//不想域名加端口访问,这里就配置http默认端口80
connector.setPort(8081);
return connector;
}
}
2、云服务提供商那里申请一个免费的证书
将tomcat下面的证书拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.yml 中添加如下配置:
server:
port: 8443 #不想域名加端口访问,这里就配置https默认端口443
ssl:
key-store: classpath:xxx.jks
key-store-password: xxx
key-store-type: JKS
请求转发
考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上。
具体配置如下:
package com.austin.springboothttps.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName TomcatConfig
* @Author liuqh
* @Date 2019-08-24 17:30
* @Description
*/
@Configuration
public class TomcatConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
// 添加http
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//不想域名加端口访问,这里就配置http默认端口80
connector.setPort(8081);
return connector;
}
}
启动项目成功
参考:
https://mp.weixin.qq.com/s/WOmOXN_IK0IMjL0_hlAOFA
https://blog.csdn.net/qq_24894159/article/details/79936212
https://www.cnblogs.com/lianggp/p/8136540.html