Эта статья была впервые опубликована на моем личном сайте:Как проекты Spring Boot поддерживают протоколы HTTP и HTTPS
Сегодня распространенным сценарием для приложений корпоративного уровня является поддержка протоколов HTTP и HTTPS.В этой статье рассматривается, как заставить приложения Spring Boot поддерживать протоколы HTTP и HTTPS.
Подготовить
Чтобы использовать коннектор HTTPS, необходимо создать хранилище ключей сертификата для зашифрованного и конфиденциального SSL-соединения браузера.
Если вы используете Unix или Mac OS, вы можете использовать следующую команду:keytool -genkey -alias tomcat -keyalg RSA
, в процессе генерации вам может потребоваться ввести некоторую собственную информацию.Например, отзыв о моей машине выглядит следующим образом:
Видно, что после выполнения вышеуказанной команды в домашнем каталоге появился новый файл .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
- Посетите URL-адрес в своем браузере
http://localhost:8080/internal/application.properties
анализировать
Согласно предыдущим статьям и официальным документам, 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.x
- Автоматическая настройка Spring Boot, Command-line-Runner
- Понимание автоматической настройки Spring Boot
- Использование аннотации Spring Boot @PropertySource при интеграции Redis
- Как настроить преобразователи HTTP-сообщений в проектах Spring Boot
- Spring Boot интегрирует Mongodb для обеспечения интерфейса Restful.
- Сфера фасоли весной
- Использование шаблона диспетчера событий в проекте Spring Boot
- Методы обработки ошибок, когда Spring Boot предоставляет интерфейсы RESTful
- Настройка собственного стартера в Spring Boot
*** В этом выпуске основное внимание уделяется таким темам, как серверные технологии, устранение неполадок и оптимизация JVM, вопросы на собеседованиях по Java, личностный рост и самоуправление, а читателям предлагается опыт работы и роста передовых разработчиков. получить что-то здесь.