一、背景
最近想搞一个小程序玩玩,然后小程序是需要https协议的,于是乎,我在华为云上申请了一个免费证书服务,验证过后就可以申请证书,申请完成后下载,里面会有两个文件,一个是server.jks,一个是keyStorePass。接下来会有大用处。
二、properties配置文件
server: port: 8088 ssl: key-store: classpath:cert/server.jks #密钥存储文件 key-store-password: Er1$KOUZP$ut94Ct # keyStorePass文件种的值 key-store-type: JKS # 密钥文件类型
三、tomcat启动配置
import org.springframework.context.annotation.Configuration; 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.context.annotation.Bean; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; @Configuration public class WebConfig { /** * http重定向到https * @return */ @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(org.apache.catalina.Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } @Bean public Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); //Connector监听的http的默认端口号 //其中两个端口不能一样 connector.setPort(8080); connector.setSecure(false); //监听到http的端口号后转向到的https的端口号,也就是项目配置的port connector.setRedirectPort(8088); return connector; } }
三、测试结果
- 直接
http://localhost:8088/doc.html
访问 - 通过https访问
https://localhost:8088.doc.html
- 通过http访问
http://localhost:8080/doc.html
- 总结 测试2和测试3的结果是一致的,因为3只是做了一个重定向,重定向到2,所以最终显示结果是一样的。四、提示 如果仅仅是实现https,只需要做properties配置文件配置即可。