Я работаю над приложением Spring для умного дома. У меня есть микроконтроллеры, которые отправляют данные в приложение Spring, но я не могу реализовать на них SSL из-за нехватки места и скорости обработки.
На стороне клиента я хочу использовать HTTPS, потому что клиент работает на Android.
Могу ли я сопоставить одни запросы с HTTP, а другие с HTTPS?
Разве мы не можем открыть два порта из приложения весенней загрузки: один на 443, другой на 80. Таким образом, на https он слушает 443, а на http - 80. Таким образом, в своем приложении вы можете настроить http для URL-адреса, чтобы использовать порт 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;
}
}