需求:前端页面访问后台需要用http,小程序访问后台需要用https,且两个端口配置不一样。
一:配置SSL方法
1,将申请的域名文件放到网关服务的resources目录下,可创建子目录,如图:
要注意看文件大小,确保不是空的。否则会加载失败。
2,在bootstrap.yml里配置SSL:
http:
# 服务器的HTTP端口
port: 8080
server:
# 服务器的HTTPS端口
port: 9090 #默认是443,在此自定义9090示例。
ssl:
enabled: true
key-store: classpath:keystore/test.webtest.com.jks # 或 .pfx文件
key-store-password: 123456 # 域名密钥
key-store-type: JKS # 或 PKCS12
配置完成如图:
到这没结束,这时候原来的http访问的8080端口不能用了。
二:增加配置类
之前使用各种tomcat配置一团糟,走了很多弯路,后来查看log才发现gateway用的netty,就不能再引入tomcat相关的依赖,否则影响启动。
在启动类所在目录下创建config,并在底部增加配置类(以下代码可直接复制):
package com.zhonghui.gateway.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.reactive.HttpHandler;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* @ClassName: HttpServer
* @Description: 配置http服务,使其即支持http又支持https服务(https通过配置文件配置)
*/
@Configuration
@Slf4j
public class HttpServer {
@Autowired
private HttpHandler httpHandler;
private WebServer webServer;
@Value("${http.port}")
private Integer httpPort;
@PostConstruct
public void start() {
log.info("加载http端口--------------------------"+httpPort);
NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(httpPort);
WebServer webServer = factory.getWebServer(httpHandler);
webServer.start();
}
@PreDestroy
public void stop() {
webServer.stop();
}
}
清缓存,重启后可访问域名+接口测试。 如果是在linux系统,也可以输入指令测试两个端口是否都已经监听:
netstat -tuln | grep -E '8080|9090'
如果两个端口都显示LISTEN,则说明配置成功。如图: