参考:@ConditionalOnProperty注解

用法解释

@ConditionalOnProperty(prefix = "server", name = "ssl.enabled", matchIfMissing = true, havingValue = "true")
prefix:application.yml文件中 配置(如配置文件)的名称
name:配置下面的属性名称,多级使用.点连接,如xxx.bbb.ccc
matchIfMissing:如果没有这个属性名,bean是否加载,默认是false(可以不用写),如果没有属性名就不加载bean
havingValue:判断属性名的值是否配备,如果匹配的话,bean才加载。

application.yml属性值

  1. #服务器端口配置
  2. server:
  3. port: 8888 #正常访问https的端口
  4. port-http: 2023 #这个是http端口,这个端口会做一个重定向的调整
  5. ssl:
  6. enabled: false #SSL证书是否启用

配置类TomcatConfig

  1. package com.tj.config;
  2. import org.apache.catalina.Context;
  3. import org.apache.catalina.connector.Connector;
  4. import org.apache.coyote.http11.Http11NioProtocol;
  5. import org.apache.tomcat.util.descriptor.web.SecurityCollection;
  6. import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  9. import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. /**
  13. * 配置http访问端口跳转到https端口的(非必须配置的)
  14. */
  15. @Configuration
  16. //根据ssl.enabled的值来控制是否加载,如果没有配置,就默认加载,如果配置了,当值为true的时候才加载
  17. @ConditionalOnProperty(prefix = "server", name = "ssl.enabled", matchIfMissing = true, havingValue = "true")
  18. public class TomcatConfig {
  19. // http 请求端口,线上配置为 8080
  20. @Value("${server.port-http}")
  21. private int serverPortHttp;
  22. // 服务器运行端口,等同于 HTTPS 请求端口,线上 443
  23. @Value("${server.port}")
  24. private int serverPortHttps;
  25. @Bean
  26. TomcatServletWebServerFactory tomcatServletWebServerFactory() {
  27. TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
  28. @Override
  29. protected void postProcessContext(Context context) {
  30. // TODO Auto-generated method stub
  31. SecurityConstraint constraint = new SecurityConstraint();
  32. constraint.setUserConstraint("CONFIDENTIAL");
  33. SecurityCollection collection = new SecurityCollection();
  34. collection.addPattern("/");
  35. constraint.addCollection(collection);
  36. context.addConstraint(constraint);
  37. }
  38. };
  39. factory.addAdditionalTomcatConnectors(createTomcatConnector());
  40. return factory;
  41. }
  42. private Connector createTomcatConnector() {
  43. Connector connector = new Connector(Http11NioProtocol.class.getName());
  44. //Connector监听的http的端口号
  45. connector.setPort(serverPortHttp);
  46. connector.setSecure(false);
  47. //监听到http的端口号后转向到的https的端口号
  48. connector.setRedirectPort(serverPortHttps);
  49. return connector;
  50. }
  51. }