嗨,Java 和 Springboot 大师们,
这是关于我使用 springboot 在 Java 中创建的一个项目。
我能够在 spring boot 中成功创建和设置 https 项目。
然后设置 HTTPS 端口,我只需通过命令行设置,而不是通过终端中的此命令在 application.properties 中设置:
$ java -Dserver.port=6001 -jar myapp-0.0.1.jar
我这样做是为了轻松创建将在其他端口运行的其他实例,比如 6002、6003 等等...
但问题是,tomcat 设置了这个默认的 HTTP 端口:
2019-08-16 02:42:36.768 INFO 6 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 6001 (https) 8080 (http)
我想摆脱它或者将它分配给另一个端口,例如6081.
我读过这个article ,并以编程方式进行设置。
但我想避免这种情况。
我只是希望它是我可以在命令行中添加为参数的东西,例如 -Dserver.port=6001。为了尽可能避免使我的项目进一步复杂化。
我试过这样做:
$ java -Dserver.port=6001 -Dserver.http.port=6081 -jar myapp-0.0.1.jar
... 但它不起作用。
非常感谢您的想法和意见!
最佳答案
您是否尝试过在 application.properties 中设置 server.port=-1。参见 Spring Boot doc .
[更新]
您可以将 HTTP 重定向到 HTTPS。
为此,您需要另一个连接器。 SpringBoot 不允许使用 application.properties 配置多个连接器。所以我们可以通过编程方式编写一个连接器。 Tomcat 的连接器示例:
@Configuration
public class MyTomcatConnector {
@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(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(6001);
return connector;
}
}
关于HTTPS : how to change default http port 8080 to another value 上的 Java Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518669/