准备
1.SSL证书(这里是阿里云免费证书)
配置
1.下载阿里证书的Tomcat
2.在resources下放入证书(只需要pfx文件)
3.Spring Boot 配置
server:
port: 443
ssl:
key-store: classpath:ssl/1534728933823.pfx
key-store-password: 1534728933823
key-store-type: PKCS12
即可完成 端口设置443(ps:我本地启动不了,老是端口被占用)
配置Http转Https
Spring Boot 3.x跳转(Http跳转Https)
@Configuration
public class HttpsComponent implements TomcatConnectorCustomizer {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(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;
}
//配置http转https
@Bean
public Connector httpConnector() {
//监听到http的端口号后转向到的https的端口号
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(80);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(443);
return connector;
}
//这里设置默认端口为443,即https的,如果这里不设置,会https和http争夺80端口
@Override
public void customize(Connector connector) {
connector.setPort(443);
}
}
Spring Boot 2.x跳转(Http跳转Https)
@Configuration
public class HttpsComponent {
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
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(connector);
return tomcat;
}
}
遇到的坑
Spring Boot 3.x与2.x的跳转方式不同,希望看到的同学注意。