sslConfig
This commit is contained in:
@@ -1,71 +0,0 @@
|
||||
package {{ .package }}.entrance.web.config;
|
||||
|
||||
import org.apache.catalina.connector.Connector;
|
||||
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;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@Configuration
|
||||
public class SSLConfig {
|
||||
|
||||
@Bean
|
||||
public ServletWebServerFactory servletContainer(Environment env) {
|
||||
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
|
||||
|
||||
// 禁用自动配置的SSL(如果存在)
|
||||
tomcat.setRegisterDefaultServlet(false);
|
||||
|
||||
if (hasSslConfig(env)) {
|
||||
tomcat.addAdditionalTomcatConnectors(createSslConnector(env));
|
||||
}
|
||||
|
||||
return tomcat;
|
||||
}
|
||||
|
||||
private boolean hasSslConfig(Environment env) {
|
||||
return env.containsProperty("ssl_certificate")
|
||||
&& env.containsProperty("ssl_certificate-private-key");
|
||||
}
|
||||
|
||||
private Connector createSslConnector(Environment env) {
|
||||
String certPath = env.getProperty("ssl_certificate");
|
||||
String keyPath = env.getProperty("ssl_certificate-private-key");
|
||||
String httpsPort = env.getProperty("server.https.port", "8443");
|
||||
|
||||
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
|
||||
connector.setScheme("https");
|
||||
connector.setSecure(true);
|
||||
connector.setPort(Integer.parseInt(httpsPort));
|
||||
|
||||
// 明确设置SSL配置
|
||||
connector.setProperty("SSLEnabled", "true");
|
||||
connector.setProperty("sslProtocol", "TLS");
|
||||
connector.setProperty("clientAuth", "false");
|
||||
connector.setProperty("sslEnabledProtocols", "TLSv1.2,TLSv1.3");
|
||||
|
||||
// 处理证书路径
|
||||
connector.setProperty("certificateFile", extractFilePath(certPath));
|
||||
connector.setProperty("certificateKeyFile", extractFilePath(keyPath));
|
||||
|
||||
return connector;
|
||||
}
|
||||
|
||||
private String extractFilePath(String classpathResource) {
|
||||
if (classpathResource == null) return null;
|
||||
|
||||
if (classpathResource.startsWith("classpath:")) {
|
||||
String resource = classpathResource.substring("classpath:".length());
|
||||
try {
|
||||
return new ClassPathResource(resource).getFile().getAbsolutePath();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to locate SSL certificate file", e);
|
||||
}
|
||||
}
|
||||
return classpathResource;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user