SpringBoot開啓https以及http重定向

1、使用JDK keytool建立SSL證書java

  進入$JAVA_HOME/bin目錄,運行如下命令web

keytool -genkey -alias WeChatAppletsDemo -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/weChat.keystore -storepass 123456

  keytool 算法

    -genkey spring

    -alias (別名) apache

    -keypass (別名密碼) 跨域

    -keyalg (算法) tomcat

    -keysize (密鑰長度) app

    -validity (有效期,天單位) ide

    -keystore (指定生成證書的位置和證書名稱) post

    -storepass (獲取keystore信息的密碼)

  在建立密鑰的時候,算法記得將$JAVA_HOME/jre/lib/security/java.security文件中的keystore配置設置與命令一致

 

注意:keys文件夾須要提早建立,不然會報錯

  以後按提示進行操做,步驟以下:

 

 

 

2、爲SpringBoot配置https

   將生成的證書文件放入項目的resources文件夾中。

  配置propertis文件

  server.http.port屬性用於開啓http端口,將其重定向到https端口中

  建立配置一個WebConfig類

 

package org.yoki.edu.portal.web.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.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Value("${server.port}")
    private int serverPort;

    @Value("${server.http.port}")
    private int serverHttpPort;

    /**
     * 解決跨域問題
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
                .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
                        "Access-Control-Request-Headers","accessToken")
                .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
                .allowCredentials(true).maxAge(3600);
    }

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @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);
            }
        };

        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
        return tomcat;
    }

    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //須要重定向的http端口
        connector.setPort(serverHttpPort);
        connector.setSecure(false);
        //設置重定向到https端口
        connector.setRedirectPort(serverPort);
        return connector;
    }
}

 

 3、測試訪問

   訪問http://localhost:8081將自動跳轉到https://localhost:8433,以下圖所示

相關文章
相關標籤/搜索