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,以下圖所示