Как проекты Spring Boot поддерживают протоколы HTTP и HTTPS

Spring Boot

Эта статья была впервые опубликована на моем личном сайте:Как проекты Spring Boot поддерживают протоколы HTTP и HTTPS

Сегодня распространенным сценарием для приложений корпоративного уровня является поддержка протоколов HTTP и HTTPS.В этой статье рассматривается, как заставить приложения Spring Boot поддерживать протоколы HTTP и HTTPS.

Подготовить

Чтобы использовать коннектор HTTPS, необходимо создать хранилище ключей сертификата для зашифрованного и конфиденциального SSL-соединения браузера.

Если вы используете Unix или Mac OS, вы можете использовать следующую команду:keytool -genkey -alias tomcat -keyalg RSA, в процессе генерации вам может потребоваться ввести некоторую собственную информацию.Например, отзыв о моей машине выглядит следующим образом:

生成kestore

Видно, что после выполнения вышеуказанной команды в домашнем каталоге появился новый файл .keystore.

настоящий бой

  • Сначала создайте новый файл конфигурации в каталоге ресурсовtomcat.https.properties, используемый для хранения информации о конфигурации HTTPS;
custom.tomcat.https.port=8443
custom.tomcat.https.secure=true
custom.tomcat.https.scheme=https
custom.tomcat.https.ssl=true
custom.tomcat.https.keystore=${user.home}/.keystore
custom.tomcat.https.keystore-password=changeit

  • Затем создайте статический класс в классе WebConfiguration.TomcatSslConnectorProperties;
@ConfigurationProperties(prefix = "custom.tomcat.https")
public static class TomcatSslConnectorProperties {
    private Integer port;
    private Boolean ssl = true;
    private Boolean secure = true;
    private String scheme = "https";
    private File keystore;
    private String keystorePassword;
    //这里为了节省空间,省略了getters和setters,读者在实践的时候要加上
    
    public void configureConnector(Connector connector) {
        if (port != null) {
            connector.setPort(port);
        }
        if (secure != null) {
            connector.setSecure(secure);
        }
        if (scheme != null) {
            connector.setScheme(scheme);
        }
        if (ssl != null) {
            connector.setProperty("SSLEnabled", ssl.toString());
        }
        if (keystore != null && keystore.exists()) {
            connector.setProperty("keystoreFile", keystore.getAbsolutePath());
            connector.setProperty("keystorePassword", keystorePassword);
        }
    }
}

  • Загрузить через аннотациюtomcat.https.propertiesконфигурационный файл и сTomcatSslConnectorPropertiesBinding, украсить класс WebConfiguration аннотациями;
@Configuration
@PropertySource("classpath:/tomcat.https.properties")
@EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorProperties.class)
public class WebConfiguration extends WebMvcConfigurerAdapter {...}

  • Создать класс в WebConfigurationEmbeddedServletContainerFactoryВведите Srping bean и используйте его для добавления созданного ранее коннектора HTTPS.
@Bean
public EmbeddedServletContainerFactory servletContainer(TomcatSslConnectorProperties properties) {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createSslConnector(properties));
    return tomcat;
}

private Connector createSslConnector(TomcatSslConnectorProperties properties) {
    Connector connector = new Connector();
    properties.configureConnector(connector);
    return connector;
}

  • пройти черезmvn spring-boot:runзапустить приложение;
  • Посетите URL-адрес в своем браузереhttps://localhost:8443/internal/tomcat.https.properties

支持HTTPS协议

  • Посетите URL-адрес в своем браузереhttp://localhost:8080/internal/application.properties

同时支持HTTP协议

анализировать

Согласно предыдущим статьям и официальным документам, Spring Boot открыл для внешнего мира множество конфигураций серверов, и эта информация о конфигурации передается через внутреннюю среду Spring Boot.ServerPropertiesКласс завершает привязку. Для ссылки на общие элементы конфигурации весеннего ботинка, пожалуйстакликните сюда

Spring Boot не поддерживает настройку коннекторов HTTP и HTTPS через application.properties. существуетОфициальная документация 70.8Один из методов, упомянутых в разделе , заключается в жестком кодировании значения свойства в программе.

Итак, мы создаем новый файл конфигурации здесьtomcat.https.propertiesДля этого, но это не соответствует «стилю Spring Boot», и в будущем может появиться возможность поддержки «настройки как HTTP-коннектора, так и HTTPS-коннектора через application.properties». я добавилTomcatSslConnectorPropertiesимитируется в Spring BootServerPropertiesРеализован механизм использования, где используется пользовательский префикс атрибутаcustom.tomcatбез использования существующихserver.префикс, так как ServerProperties запрещает использование этого пространства имен в других файлах конфигурации.

@ConfigurationProperties(prefix = "custom.tomcat.https")Эта аннотация заставит Spring Boot автоматическиcustom.tomcat.httpsСвойства в начале привязаны к членам класса TomcatSslConnectorProperties (убедитесь, что существуют геттеры и сеттеры этого класса). Стоит отметить, что Spring Boot автоматически преобразует значение свойства в соответствующий тип данных во время процесса привязки, напримерcustom.tomcat.https.keystoreЗначение автоматически привязывается к хранилищу ключей объекта File.

использовать@PropertySource("classpath:/tomcat.https.properties")чтобы загрузить Spring Boottomcat.https.propertiesсвойства в файле.

использовать@EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorProperties.class)Пусть Spring Boot автоматически создаст объект свойств, содержащий свойства, импортированные через @PropertySource выше.

После импорта значения свойства в память и создания экземпляра TomcatSslConnectorProperties необходимо создатьEmbeddedServletContainerFactoryКомпонент Spring типа, который используется для создания EmbeddedServletContainer.

пройти черезcreateSslConnectorметод для построения коннектора, который содержит указанные нами значения свойств, а затем передатьtomcat.addAdditionalTomcatConnectors(createSslConnector(properties));Настройте коннектор HTTPS для контейнера tomcat.

использованная литература

  1. Настроить SSL

Весенняя загрузка серии 1.x

  1. Автоматическая настройка Spring Boot, Command-line-Runner
  2. Понимание автоматической настройки Spring Boot
  3. Использование аннотации Spring Boot @PropertySource при интеграции Redis
  4. Как настроить преобразователи HTTP-сообщений в проектах Spring Boot
  5. Spring Boot интегрирует Mongodb для обеспечения интерфейса Restful.
  6. Сфера фасоли весной
  7. Использование шаблона диспетчера событий в проекте Spring Boot
  8. Методы обработки ошибок, когда Spring Boot предоставляет интерфейсы RESTful
  9. Настройка собственного стартера в Spring Boot

*** В этом выпуске основное внимание уделяется таким темам, как серверные технологии, устранение неполадок и оптимизация JVM, вопросы на собеседованиях по Java, личностный рост и самоуправление, а читателям предлагается опыт работы и роста передовых разработчиков. получить что-то здесь.javaadu