我正在开发一个Spring应用程序,如果用于智能家居。我得到了将数据发送到Spring应用程序的微控制器,但由于空间和处理速度不够,我无法对它们实施SSL。
在客户端,我想使用HTTPS,因为客户端在Android上运行。
我可以将某些请求映射到HTTP,将其他请求映射到HTTP吗?
答案 0 :(得分:0)
我们不能从弹簧启动应用程序中打开两个端口,其中一个是443,另一个是80.这样,在https上它会监听443,而在http到80.所以在您的应用程序中,您可以在网址上配置http以使用80端口和https使用443端口。
我们可以通过改变application.properties:
来做到这一点#Https settings
server.port=443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password = secret
server.ssl.key-password = secret
#Http setting
server.http.port=80
我给出了使用Undertow服务器的示例,您可以在任何应用程序服务器(tomcat等)上执行此操作:
@SpringBootApplication
public class Boot {
@Value("${server.http.port:0}")
private Integer httpPort;
public static void main(String[] args) throws Exception {
SpringApplication.run(Boot.class, args);
}
@Bean
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {
public void customize(Builder builder) {
// worker options
builder.setWorkerThreads(500);
builder.setWorkerOption(Options.TCP_NODELAY, true);
// io options
builder.setIoThreads(Runtime.getRuntime().availableProcessors() * 2);
// socket options
builder.setSocketOption(Options.BACKLOG, 10000);
builder.setSocketOption(Options.TCP_NODELAY, true);
builder.setSocketOption(Options.REUSE_ADDRESSES, true);
// server options
builder.setServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE, false);
builder.setServerOption(UndertowOptions.ALWAYS_SET_DATE, true);
builder.setServerOption(UndertowOptions.RECORD_REQUEST_START_TIME, false);
// Done to keep both http and https port open at production
if (httpPort > 0)
builder.addHttpListener(httpPort, "0.0.0.0");
}
});
return factory;
}
}