准备一个证书

可以直接通过域名申请;
也可以使用自签证书(自签证书创建可以看我的另一篇文章:[使用KeyStore生成证书])

配置SSL

将(keystore格式、p12格式、jks格式)证书文件(其他格式证书文件未进行测试),移动至项目路径的资源文件夹下(建议)。
然后在配置文件中配置SSL:

  1. server:
  2. # 项目端口
  3. port: 443
  4. ssl:
  5. # 证书文件所在地址
  6. key-store: classpath:CATest2.p12
  7. # 密钥口令
  8. key-store-password: 123456
  9. # 证书类型
  10. key-store-type: PKCS12
  11. # 证书别名
  12. key-alias: testClient

image.png
配置完后就可以进行Https访问了,但是无法实现从Http自动跳转到Https

配置自动跳转Https

创建一个配置类·:

  1. import org.apache.catalina.Context;
  2. import org.apache.catalina.connector.Connector;
  3. import org.apache.tomcat.util.descriptor.web.SecurityCollection;
  4. import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
  5. import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. @Configuration
  9. public class DemoConfiguration {
  10. @Bean
  11. public Connector connector(){
  12. Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
  13. connector.setScheme("http");
  14. // 设置监听端口(一般设置为80端口,由于本地80端口被占用所以这里用的是8080端口)
  15. connector.setPort(8080);
  16. connector.setSecure(false);
  17. // 当浏览器监听到http端口(默认为80,此处为8080)时,会自动重定向到443端口(与项目端口保持一致)
  18. connector.setRedirectPort(443);
  19. return connector;
  20. }
  21. @Bean
  22. public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
  23. TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
  24. @Override
  25. protected void postProcessContext(Context context) {
  26. SecurityConstraint securityConstraint=new SecurityConstraint();
  27. securityConstraint.setUserConstraint("CONFIDENTIAL");
  28. SecurityCollection collection=new SecurityCollection();
  29. collection.addPattern("/*");
  30. securityConstraint.addCollection(collection);
  31. context.addConstraint(securityConstraint);
  32. }
  33. };
  34. tomcat.addAdditionalTomcatConnectors(connector);
  35. return tomcat;
  36. }
  37. }

然后重启项目,就可以实现从Https自动跳转到Https了。
本例中项目会监听8080端口跳转到443端口。
默认部署到网络时监听80端口,跳转到443端口。
image.png