springBoot2.X 支持http、https訪問


1.第一步 生成https證書

打開cmd

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore C:\Users\TXJS\Desktop\temp\sslhttps.p12 -validity 365

2.第二步 將證書復制到項目的 resources 目錄下 添加SSL配置

 

 

server:
  port: 443
  ssl:
    key-store: classpath:sslhttps.p12
    key-alias: tomcathttps
    key-store-password: 123456
    enabled: true
    key-store-type: JKS

3.如果只是想變成https訪問 上面步驟已經足夠 如果還需要配置http訪問 新增配置文件

package com.txj.bwbd.config;

import org.apache.catalina.Context;
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.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Create by IntelliJ IDEA
 *
 * @author chenlei
 * @dateTime 2019/5/23 18:09
 * @description TomcatConfig
 */
@Configuration
public class TomcatConfig {

//    @Bean
//    public ServletWebServerFactory webServerFactory() {
//        TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory();
//        fa.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}"));
//        return fa;
//    }


//    @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);
//            }
//        };
//        connector.setProperty("relaxedQueryChars", "[]{}");
//        tomcat.addAdditionalTomcatConnectors(connector);
//        return tomcat;
//    }

    /* --------------------請按照自己spring boot版本選擇 start--------------------- */

    // 這是spring boot 2.0.X版本的 添加這個,上一個就不用添加了
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
        return tomcat;
    }

    /* --------------------請按照自己spring boot版本選擇 end--------------------- */


    // 配置http
    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(80);
        return connector;
    }

}

備注:完成以上配置就ok了 留坑:

 

 使用該方法 將http重定向到 https端口 會導致post請求參數丟失 原因未知! 不重定向是完全沒問題的 

4. 附上測試截圖

https:

 

 http:

 

 備注:這里注意使用postman測試https需要關掉 postman SSL認證

 5.購買了阿里ESC實例的可以阿里雲申請免費的SSL證書 替換上面自己生成的證書即可 證書別名可以注釋掉

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM