Spring Boot支持https
获取SSL证书
有两种方式可以获取到SSL证书:
(1)自己通过keytool生成;
(2)通过证书授权机构购买;
这里作为演示,采用keytool生成,实际项目中大部分采用的都是购买的方式。
那么怎么使用keytool生成呢?
Keytool是java提供的证书生成工具,如果配置了java_home的,直接就可以在控制台进行生成了,这里演示使用的是window的dos窗口:
- 打开dos窗口;
- 输入如下命令:
keytool -genkey -alias tomcat -dname "CN=com.wxd,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
-keystore keystore.p12 这里最好指定一下绝对路径,如果jdk装在c盘的会报错:keytool 错误: java.io.FileNotFoundException: keystore.p12 (拒绝访问。)
Spring Boot中启用HTTPS
默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,Spring
Boot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些
在application.properties中配置HTTPS,配置信息如下:
#https端口号. server.port: 443 #http端口 server.http.port=8080 #证书的路径. server.ssl.key-store: classpath:keystore.p12 #证书密码,请修改为您自己证书的密码. server.ssl.key-store-password: 123456 #秘钥库类型 server.ssl.keyStoreType: PKCS12 #证书别名 server.ssl.keyAlias: tomcat
注意:请将在上一步生成的证书放到src/main/resources目录下
将HTTP请求重定向到HTTPS
package com.neo.https.config; 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.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author wxd * @version V1.0 * @description SpringSecurityConfiguration * @date 2022/4/22 14:16 **/ @Configuration public class HttpToHttpsContainerFactoryConfig { @Value("${server.http.port}") private int port; @Value("${server.port}") private int httpsPort; @Bean public ServletWebServerFactory servletContainer() { 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(httpConnector()); return tomcat; } private Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(port); connector.setSecure(false); connector.setRedirectPort(httpsPort); return connector; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类