springboot默认是http的
一、支持https访问
需要生成证书,并配置到项目中。
1、证书
如果公司提供,则直接使用公司提供的证书;
如果公司没有提供,也可自己使用Java自带的命令keytool来生成:
(1)执行cmd命令
windows下cmd打开命令黑窗口,输入以下命令(直接复制即可)
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
有些参数是可以自定义的:
1. -storetype 指定密钥仓库类型
2. -keyalg 生证书的算法名称,RSA是一种非对称加密算法
3. -keysize 证书大小
4. -keystore 生成的证书文件的存储路径
5. -validity 证书的有效期
(2)按照提示输入信息
输入keytool命令后回车会弹框提示输入password、first name、last name、地址等信息。
(3)最后会自动生成一个文件
如我
把这个文件复制出来放到:
- 可以放在项目的根目录下,即和pom文件同级的目录
- 也可放置在
src/main/resources
目录下
我选择了放在src/main/resources下。
2、
在配置文件中配置支持https所需信息
# 支持https访问
# https访问的端口号
server.port=8443
# 证书的路径,根据证书放置位置不同,写法不同
# 如果证书放在根目录下,此处只需要写证书的名字即可,但项目打包部署时提示证书找不到,故建议放在resources文件夹下
# 如果证书放在 src/main/resources 下,则需写 classpath:keystore/server.keystore
server.ssl.key-store=classpath:keystore/server.keystore
# 证书的签名密码,如果是自己生成的证书在输入信息时会有输入
server.ssl.key-store-password=******
# 证书类型,常见的两种证书类型有:PKCS12和JKS,这里需要注意证书类型不能写错了,否则项目启动时会报错
server.ssl.keyStoreType=JKS
如我在项目的application.properties中配置
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=wtyy
重启项目,即可使用https://localhost:{port}/xxx访问了。
二、同时支持https和http
上述配置了https后,使用http访问会报错,如果需要同时支持https和http访问,
因一个项目只能配置一个 server.port
,所以要支持http访问需要用Java代码实现。
1、添加http端口配置
如我在配置文件新增
http.port=9999
2、编写java配置类
/*** * @function http访问配置类**/
@Configuration
public class TomcatConfig {@Value("${http.port}")private int httpPort;@Beanpublic WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {@Overridepublic void customize(ConfigurableWebServerFactory factory) {if (factory instanceof TomcatServletWebServerFactory) {TomcatServletWebServerFactory webServerFactory = (TomcatServletWebServerFactory)factory;Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);// 设置http访问的端口号,不能与https端口重复,否则会报端口被占用的错误connector.setPort(httpPort);webServerFactory.addAdditionalTomcatConnectors(connector);}}};}}
之后就可以使用这个9999端口号进行http访问了。
参考 spring-boot/spring-boot-samples/spring-boot-sample-tomcat-multi-connectors/src/main/java/sample/tomcat/multiconnector/SampleTomcatTwoConnectorsApplication.java at v2.0.0.RELEASE · spring-projects/spring-boot · GitHub