感谢简书嗨_等风来文章予以参考,
项目需要支持http和https两种协议,网上百度一波,大家讲的都差不多,但在我使用中也走了一点点弯路,我总结一下这次的使用以及我遇到的问题,希望可以帮助和我一样的萌新
一:依赖方面,初始的springboot就可以,我的是2.2.2-release版
二:本地创建证书调试
ps:首先进入你的Java\bin目录下,然后执行如下命令
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore
D:\keystore.p12 -validity 3650
这其中的字段含义如下:
1.-storetype 指定密钥仓库类型
2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法
3.-keysize 证书大小
4.-keystore 生成的证书文件的存储路径
5.-validity 证书的有效期
然后就会出现如下,随便填写就好:
然后在你写的路径下就会有一个keystore.p12文件,复制到项目中去,路径随便
PS: 这里切记切记,如果要部署的话,打完包的路径和你本地的路径是不一样的,本地测试可以,部署上去就不行了,这里建议放在项目根路径下的文件夹里,可以用assembly配置打包路径,或者使用user.dir来获取路径。
三、撸代码
具体看注释就可以了,开头老哥中的写法是以前版本的。这个是2.x后的写法。有位老哥解读了一下变更的源码我找不到了,下回看见附上链接吧
package com.ehl.restful;
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.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SSLConfig {
@Value("${http.port}")
private Integer httpPort;
@Value("${server.port}")
private Integer httpsPort;
@Bean
public TomcatServletWebServerFactory servletContainer() { //springboot2 新变化
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(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);//http端口
connector.setSecure(true);//这个,true同时支持http和https
connector.setRedirectPort(httpsPort);// https端口
return connector;
}
}
然后是配置文件的
#https port
server.port=8081
#http port
http.port=8888
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=123456
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias:tomcat
一开始还纠结怎么能配两个端口呢,才发现http.port是自定的,只是为了在config中注入进入而已,名称随便怎么写,端口还是只有server.port来配置。
四、没了,启动就完事了。