Bootstrap

SpringBoot https访问控制

开发中如果现在是进行了 http 访问,则应该让请求跳转到 https 的 443 端口上的程序处理类

如果 要想实现这样的处理需要追加一个配置程序类:

import org.apache.catalina.connector.Connector;
      import org.apache.tomcat.util.descriptor.web.SecurityCollection;
      import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
      import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpConnectorConfig { // 此类专门负责HTTP的连接的相关配置
   public Connector initConnector() {
      Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol") ;
      connector.setScheme("http"); // 如果现在用户使用普通的http的方式进行访问
      connector.setPort(80); // 用户访问的是80端口
      connector.setSecure(false); // 如果该连接为跳转则表示不是一个新的连接对象
      connector.setRedirectPort(443); // 设置转发操作端口
      return connector;
   }
   @Bean
   public TomcatEmbeddedServletContainerFactory servletContainerFactory() {
      TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {
         protected void postProcessContext(
               org.apache.catalina.Context context) {// 该方法主要进行请求处理的上下文配置
            SecurityConstraint securityConstraint = new SecurityConstraint(); // 定义新的安全访问
            策略
            securityConstraint.setUserConstraint("CONFIDENTIAL"); // 定义用户的访问约束要求
            SecurityCollection collection = new SecurityCollection() ;
            collection.addPattern("/*"); // 匹配所有的访问映射路径
            securityConstraint.addCollection(collection); // 追加路径映射访问配置
            context.addConstraint(securityConstraint);
         };
      };
      factory.addAdditionalTomcatConnectors(this.initConnector());
      return factory;
   }
}

如果以后用户要访问 80 端口,则会将其自动跳转到 443 端口。

 

;