我需要在嵌入式Tomcat中添加一个AJP连接器,并禁用(或替换)侦听8080的默认连接器。
我尝试使用EmbeddedServletContainerCustomizer进行自定义,但我无法获取Tomcat对象的句柄来替换在那里创建的默认连接器。因此,除了我的AJP端口之外,我最终得到了8080上的http端口。
接下来,我尝试扩展TomcatEmbeddedServletContainerFactory并覆盖其getTomcatEmbeddedServletContainer方法。根据JavaDoc,这似乎是替换默认连接器的最佳位置,但它仍然最终被启用(并且也不会创建我的AJP连接器)。任何想法我可能会失踪?我已经通过调试器验证了我的配置正在运行。
下面的答案,这是最干净的解决方案:
@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);
}
});
}
};
}
答案 0 :(得分:4)
您可以使用TomcatConnectorCustomizer
将现有连接器配置为使用AJP,方法是将其添加到TomcatEmbeddedServletContainerFactory
。
答案 1 :(得分:1)
只需创建一个EmbeddedServletContainerCustomizer
bean并将其重新配置为AJP:
@Configuration
public class ServletConfig {
// AJP port defined in properties (default 666)
@Value("${tomcat.ajp.port:666}")
private Integer ajpPort;
@Bean
public EmbeddedServletContainerCustomizer ajpContainerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.setProtocol("AJP/1.3");
tomcat.setPort(ajpPort);
}
};
}
}