2

我们的主要应用程序在端口 8443 上management.port提供服务,我们使用在端口 8444 上提供执行器端点。

有没有办法让一个端点(健康端点)同时在 8443 和 8444 上服务,而其余端点只留在端口 8444 上?

4

1 回答 1

2

如果您使用的是内置的 Tomcat 容器,您可以:

  1. 删除管理端口配置属性
  2. 添加一个额外的连接器来服务端口 8444
  3. 添加过滤器以仅允许在该端口上访问运行​​状况检查

您的代码可能看起来像这样。

@ComponentScan
@Configuration
@EnableAutoConfiguration
public class Application extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter implements EmbeddedServletContainerCustomizer {

    @Autowired
    private PortInterceptor portInterceptor;

    public static void main(String[] args) throws Exception {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(portInterceptor);
    }

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory)container;
        Connector connector = new Connector();
        connector.setPort(8444);
        tomcat.addAdditionalTomcatConnectors(connector);
    }
}

@Component
public class PortInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(request.getLocalPort() == 8444){
            return isHealthCheckRequest(request);
        }
        return true;
    }
}
于 2016-04-14T12:55:45.540 回答