我希望我的SpringBoot应用程序将发送到端口81的请求重定向到端口8080(应用程序绑定到的端口)。但是,应用程序在启动时失败,因为您不允许使用特权端口。
我知道有一个使用root访问或使用类似apache2的方法来重定向的解决方案,但是如果可能的话我只想使用我的SpringBoot应用程序的编程解决方案,没有外部配置。
这是我用于重定向端口的配置文件(如果我将81更改为超过1024的任何端口,则它可以工作):
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class EmbeddedTomcatConfiguration {
private static final String PROTOCOL_HTTP = "HTTP/1.1";
private static final String SCHEME_HTTP = "http";
private static final long ASYNC_TIMEOUT = 20000;
private static final int REDIRECT_PORT = 8080;
private static final int LISTENING_PORT = 81;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
final TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createConnector());
return tomcat;
}
private Connector createConnector() {
Connector connector = new Connector(PROTOCOL_HTTP);
connector.setScheme(SCHEME_HTTP);
connector.setPort(LISTENING_PORT);
connector.setRedirectPort(REDIRECT_PORT);
connector.setSecure(false);
connector.setAsyncTimeout(ASYNC_TIMEOUT);
return connector;
}
}