You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot动态获取运行端口用于OAuth2实现的问题

问题:OAuth2初始化前动态获取应用运行端口失败

我需要在OAuth2执行前动态获取应用运行端口,否则OAuth2无法正常连接。当前应用配置server.port=8000,启动日志显示Tomcat初始化端口为8000,但遇到两个问题:

  • 实现WebServerFactoryCustomizer的CustomContainer类执行时机在OAuth2之前,但获取到的端口是8080(错误);
  • 实现ApplicationListener<ServletWebServerInitializedEvent>并添加@Order(Ordered.HIGHEST_PRECEDENCE)注解的PortDomain类能获取正确的8000端口,但该类执行时机仍晚于OAuth2,导致OAuth2连接失败。

启动日志

2023-01-12 17:14:31.767  INFO 2492 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8000 (http)
2023-01-12 17:14:31.777  INFO 2492 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-01-12 17:14:31.777  INFO 2492 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.68]
System 8080

CustomContainer类代码

@Component
public class CustomContainer  implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        System.out.println("System " +factory.getWebServer().getPort());
    }
}

application.properties配置

server.port=8000

PortDomain类代码

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class PortDomain  implements ApplicationListener<ServletWebServerInitializedEvent> {

        private static Integer port;

        private String domain = InetAddress.getLoopbackAddress().getHostName();


        @Override
        public void onApplicationEvent(ServletWebServerInitializedEvent event) {
            setPort(event.getWebServer().getPort());
            System.out.println("Check way "+event.getWebServer().getPort());
        }

        public static void setPort(Integer port) {
            PortDomain.port = port;
        }

        public String portDomain(){
            String protocolDomain = "http://"+domain+":"+port;
            log.info("UrlUtility protocolDomain{}",protocolDomain);
            return protocolDomain;
        }

}

内容的提问来源于stack exchange,提问作者Sard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:20:25