Springboot - 收听特权端口(以编程方式)

时间:2018-06-04 14:18:13

标签: java apache spring-boot tomcat web

我希望我的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;
    }
}

0 个答案:

没有答案