• SpringBoot配置http和https


    修改application.yml配置

    将原来的http改为https,application.yml配置文件中server添加相关的ssl配置

    # Tomcat
    server:
      tomcat:
        uri-encoding: UTF-8
        max-threads: 1000
        min-spare-threads: 30
      port: 8443 #原来是http的8080
      connection-timeout: 5000ms
      servlet:
        context-path: /
      ssl: #添加的ssl自签名证书
        key-store: classpath:keystore.jks #注意路径要配置正确
        key-store-password: lovespring
        key-alias: lovespring
        key-password: lovespring
    
    http: # 新加一个http的端口号配置
      port: 8080
    

    注意,如果ssl配置不正确,SpringApplication启动后,会报端口号被占用,使用netstat -ano|findStr 8443一看,还真有两个进程在使用tcp的8443端口 :(。其实是ssl配置不正确导致的,特地记录一下。

    修改Application代码

    
        @Bean
        public ServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
                @Override
                protected void postProcessContext(Context context) {
                    // 如果要强制使用https,请松开以下注释
                    // SecurityConstraint constraint = new SecurityConstraint();
                    // constraint.setUserConstraint("CONFIDENTIAL");
                    // SecurityCollection collection = new SecurityCollection();
                    // collection.addPattern("/*");
                    // constraint.addCollection(collection);
                    // context.addConstraint(constraint);
                }
            };
            tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
            return tomcat;
        }
    
        // 配置http
        private Connector createStandardConnector() {
            // 默认协议为org.apache.coyote.http11.Http11NioProtocol
            Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
            connector.setSecure(false);
            connector.setScheme("http");
            connector.setPort(port);
            connector.setRedirectPort(httpsPort); // 当http重定向到https时的https端口号
            return connector;
        }
    
        @Value("${http.port}")
        private Integer port;
    
        @Value("${server.port}")
        private Integer httpsPort;
    

    注意,SpringBoot版本不一样,代码也不一样,主要是TomcatServletWebServerFactory 这个类是2.0.x才有的。其它版本可以在官方示例链接中切换分支版本查看。

    参考

    https://www.cnblogs.com/lianggp/p/8136540.html
    官方示例



    作者:Jamling
    链接:https://www.jianshu.com/p/4ce077b15a2c
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
    Qt 下快速读写Excel指南(尘中远)
    QT 那些事
    安卓环境下,通过QT调用jar包
    android使用C/C++调用SO库
    雷军曾定下目标,2017年将聚焦5大核心战略,分别是:黑科技、新零售、国际化、人工智能和互联网金融五大部分
    Maven和Gradle
    链接生成接口
    孤儿进程和僵尸进程
    Case when 的使用方法
  • 原文地址:https://www.cnblogs.com/xiadongqing/p/13042101.html
Copyright © 2020-2023  润新知