Может ли мое приложение Spring Boot запускать HTTPS только на определенных @RequestMappings?

Я работаю над приложением Spring для умного дома. У меня есть микроконтроллеры, которые отправляют данные в приложение Spring, но я не могу реализовать на них SSL из-за нехватки места и скорости обработки.

На стороне клиента я хочу использовать HTTPS, потому что клиент работает на Android.

Могу ли я сопоставить одни запросы с HTTP, а другие с HTTPS?

0
0
681
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разве мы не можем открыть два порта из приложения весенней загрузки: один на 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;
    }

}

Другие вопросы по теме