为此,我希望安装以下设置:
-
HTTP连接器重定向到HTTPS一对一的情况
-
处理来自前端Apache服务器的请求的AJP连接器。
到目前为止,关于第二种情况,我认为我已经能够将配置放置到位,因此我创建了以下配置类:
@Configuration
public class EmbeddedWebServerConfiguration {
@Value("${server.port}")
private int httpPort;
@Value("${server.secure.port}")
private int httpsPort;
@Value("${server.uses.ssl}")
private boolean usesSSL;
@Value("${server.uses.ajp}")
private boolean usesAjp;
@Value("${server.ajp.port}")
private int ajpPort;
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection securityCollection = new SecurityCollection();
securityCollection.addPattern("/*");
securityConstraint.addCollection(securityCollection);
context.addConstraint(securityConstraint);
}
};
if (usesSSL) {
tomcat.addAdditionalTomcatConnectors(redirectConnector());
}
if (usesAjp) {
tomcat.addAdditionalTomcatConnectors(ajpConnector());
}
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
private Connector ajpConnector() {
Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setSecure(false);
return connector;
}
}
有没有办法让Spring省略它的默认连接器的创建?我试着到处看看他们的文件,但没有发现任何有用的东西。因为我要启动一个AJP连接器(作为附加连接器添加),所以我不希望默认的HTTP连接器就位。
此外,当我试图创建重定向连接器来处理HTTPS请求时,由于相同的端口绑定(默认连接器侦听与重定向连接器相同的端口),我的应用程序将不会启动。
这个设置在2.0之前的Spring boot版本上非常简单,但是由于某些原因,在进行新的更改时并不是那么容易。