📅  最后修改于: 2023-12-03 15:35:03.234000             🧑  作者: Mango
在 web 安全方面,HTTPS 远比 HTTP 更优秀。它不仅能防止窃听和篡改,还可以防范中间人攻击。在 Spring Boot 中,启用 HTTPS 非常简单,这篇文章将为您演示如何实现。
在启用 HTTPS 之前,您必须有 SSL 证书。您可以通过许多机构或自签名来获得 SSL 证书。
首先,将 SSL 证书添加到您的 Spring Boot 项目中。将您的 keystore 放入项目的文件夹中。在 application.properties 中,配置 SSL 相关属性。
server.port=8443
server.ssl.key-store-type=JKS
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=tomcat
在启动你的应用程序时,创建 SSL 连接器,代码如下:
@Configuration
public class SSLConfiguration {
@Value("${server.port}")
private int port;
@Value("${ssl.keystore}")
private Resource keystore;
@Value("${ssl.key-store-password}")
private String password;
@Value("${ssl.key-store-type}")
private String type;
@Bean
public TomcatServletWebServerFactory 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(8080);
connector.setSecure(false);
connector.setRedirectPort(port);
return connector;
}
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(sslConnector());
return tomcat;
}
private Connector sslConnector() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("https");
connector.setSecure(true);
connector.setPort(port);
connector.setProperty("SSLEnabled", "true");
connector.setProperty("keystoreFile", keystore.getFile().getAbsolutePath());
connector.setProperty("keystorePass", password);
connector.setProperty("keystoreType", type);
return connector;
}
}
将应用程序以 HTTPS 协议启动,以便在浏览器中访问安全站点。
默认情况下,Spring Boot 端口为 8080,您应该将它更改为 8443。
server.port=8443
启用 HTTPS 比较简单,但它可以大大提高安全性,这对于Web 应用程序至关重要。现在你知道如何在 Spring Boot 中启用 HTTPS。