您现在的位置是:首页 >技术杂谈 >SpringBoot项目中配置SSL,开启HTTPS网站首页技术杂谈

SpringBoot项目中配置SSL,开启HTTPS

天菜小朋友 2025-03-28 12:01:02
简介SpringBoot项目中配置SSL,开启HTTPS

①创建你的SpringBoot项目之后,检查项目是否能正常访问,写一个测试接口

测试成功!

ps:这里有 ‘/api’  的前缀是因为我配置了 

server.servlet.context-path=/api

②使用命令行生成证书文件

keytool -genkeypair -alias [你自定义的密钥库别名] -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650

按回车之后根据提示信息 输入密码,个人信息等数据。最后问数据是否正确输入 是!

此时生成证书文件。

证书文件生成位置:C:UsersYourUsername

生成文件名称为 keystore.p12 文件

③复制此文件到java目录 src/resources 下

④编写配置文件properties,或者yml文件

properties文件编写方式

# HTTPS 端口
server.port=8443
# 指定密钥库文件路径
server.ssl.key-store=classpath:keystore.p12
# 指定密钥库类型
server.ssl.key-store-type=PKCS12
# 指定密钥库别名
server.ssl.key-alias=刚才你自定义的别名
# 指定密钥库密码
server.ssl.key-store-password=刚才你输入的密码

yml文件编写方式

server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-type: PKCS12
    key-alias: 自定义别名
    key-store-password: 自定义密码

⑤编写tomcat端口重定向配置文件

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.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;

@Configuration
public class TomcatConfig {

    @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(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setPort(8989); // HTTP 端口
        connector.setSecure(false);
        connector.setRedirectPort(8443); // 重定向到 HTTPS 端口
        return connector;
    }
}

解释:

  • server.port=8443:将 Spring Boot 应用的默认端口设置为 8443,用于 HTTPS 连接。
  • redirectConnector() 方法:创建一个额外的 Tomcat 连接器,将其端口设置为 8989 作为 HTTP 端口。当有 HTTP 请求到达该端口时,会将请求重定向到 8443 端口的 HTTPS 连接。

完成以上配置后,启动 Spring Boot 应用,就可以通过 http://localhost:8989 访问应用,它会自动重定向到 https://localhost:8443

⑥测试接口是否能使用https

测试成功!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。