Spring Boot - 替换默认的嵌入式 Tomcat 连接器 [英] Spring Boot - replace default embedded Tomcat connector

查看:42
本文介绍了Spring Boot - 替换默认的嵌入式 Tomcat 连接器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要向嵌入式 Tomcat 添加一个 AJP 连接器,并禁用(或替换)默认的连接器以侦听 8080.

I need to add an AJP connector to embedded Tomcat and disable (or replace) the default connector that listens on 8080.

我已尝试使用 EmbeddedServletContainerCustomizer 对其进行自定义,但我无法获取 Tomcat 对象的句柄以替换在那里创建的默认连接器.结果,除了我的 AJP 端口之外,我还使用了 8080 上的 http 端口.

I've tried customizing this with EmbeddedServletContainerCustomizer, but I can't get a handle on the Tomcat object to replace the default connector created there. As a result I end up with the http port on 8080 in addition to my AJP ports.

接下来,我尝试扩展 TomcatEmbeddedServletContainerFactory 并覆盖其 getTomcatEmbeddedServletContainer 方法.根据 JavaDoc,这似乎是替换默认连接器的完美位置,但它最终仍被启用(并且也不会创建我的 AJP 连接器).任何想法我可能会错过什么?我已经通过调试器验证了我的配置正在运行.

Next, I've tried extending TomcatEmbeddedServletContainerFactory and overriding its getTomcatEmbeddedServletContainer method. Per the JavaDoc, this appears to be the perfect place to replace the default connector, but it still ends up being enabled (and doesn't create my AJP connector either). Any ideas what I might be missing? I've verified with the debugger that my configuration is being run.

根据下面的答案,这是最干净的解决方案:

@Bean
public EmbeddedServletContainerFactory tomcat() {
    TomcatEmbeddedServletContainerFactory myFactory = new TomcatEmbeddedServletContainerFactory();
    myFactory.setProtocol("AJP/1.3");
    myFactory.setPort(9000);
    return myFactory;
}

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer2() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() {
                @Override
                public void customize(Connector connector) {
                    connector.setRedirectPort(9001);
                }
            });
        }
    };
} 

推荐答案

您可以使用 TomcatConnectorCustomizer 将现有连接器配置为使用 AJP,方法是将其添加到 TomcatEmbeddedServletContainerFactory.

You can use a TomcatConnectorCustomizer to configure the existing connector to use AJP by adding it to the TomcatEmbeddedServletContainerFactory.

这篇关于Spring Boot - 替换默认的嵌入式 Tomcat 连接器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆