Я хочу, чтобы мое приложение 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;
}
}