我正在尝试为在 Embedded Tomcat Server 8.5.34 中运行的 Spring Boot 项目配置 HTTP 2,但我无法这样做。我遵循了这个 SO Thread但无法实现。我的服务器启动并且工作正常,但即使在为 HTTP 2 配置之后,它也可以在 HTTP 1.1 中工作。我已将我的项目配置为使用自签名证书运行,并且这些设置在application.properties
文件中。下面是我的配置文件。请帮忙。
@Configuration
public class ConnectorConfig {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(getHttpConnector());
// the following line isn't working
// tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.addUpgradeProtocol(new Http2Protocol()));
return tomcat;
}
@Bean // not working
public EmbeddedServletContainerCustomizer tomcatCustomizer() {
return (container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
((TomcatEmbeddedServletContainerFactory) container)
.addConnectorCustomizers((connector) -> connector.addUpgradeProtocol(new Http2Protocol()));
}
};
}
private Connector getHttpConnector() {
Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(9000);
// the following line isn't working
// connector.addUpgradeProtocol(new Http2Protocol());
return connector;
}
}