需求:前端页面访问后台需要用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,则说明配置成功。如图:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐