java高级开发

SpringBoot 如何同时支持 httphttps?

2020-03-06  本文已影响0人  老鼠AI大米_Java全栈

大多数项目都是使用http协议,有时也需要https协议,比如支付系统,商城系统等都需要https加密数据传输。

crt 转 jks

spring boot使用的是内嵌的tomcat服务器,ssl证书类型是crt,先要转换为jks类型。

 # 转p12
  openssl pkcs12 -export -out keystore.pkcs12 -inkey nexus.key -in nexus.crt
    
  # 这里需要设置密码
  # 再将p12格式文件转为.jks格式:
  keytool -v -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore 
  keystore.jks -deststoretype JKS
  # 输入上步设置的密码并设置新密码 可以和上一步一样的密码

配置ssl

将生成的 jks 文件放到项目的 resource 目录下,开始配置 application.yml 文件。

server:
  # https 端口
  port: 8888
  custom:
    # http 端口
    httpPort: 9999
  ssl:
    key-store: classpath:keystore.jks
    key-password: 123456
    key-store-type: JKS
  tomcat:
    uri-encoding: utf-8
    basedir: tmp
  #
  servlet:
    context-path: /

然后编写 Https配置类:HttpConfig.java

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
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;

/**
 * @Author: 
 * @Decription: 配置同时支持 HTTP 与 HTTPS 访问
 * @Date: 19:39 2020/2/20
 **/
@Configuration
public class HttpsConfig {
    @Value("${server.custom.httpPort}")
    private Integer httpPort;

    @Bean
    public ServletWebServerFactory serverFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }
    /**
     * 配置http
     * @return
     */
    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }
}

这样就可以同时使用http和https方式访问了。

上一篇下一篇

猜你喜欢

热点阅读