У меня есть приложение на основе службы отдыха Spring Boot, настроенное на несколько портов, которое должно различать guish каждый запрос между портом, через который он прошел. Идея иметь несколько портов для приложения обусловлена тем, что разные публичные c и частные подсети (с разными уровнями доступа к безопасности) могут получать доступ к различным частям служб, предоставляемых приложением.
Концептуально Идея состояла в том, чтобы добавить дополнительные коннекторы во встроенный tomcat, а затем перехватить все входящие запросы, изменив их, добавив в каждый из них настраиваемый заголовок, указав «канал», через который он прошел.
Проблема, с которой я сталкиваюсь, заключается в том, что я понятия не имею, как я мог бы перехватить эти входящие запросы на уровне соединителя (до того, как он попадет в какой-либо фильтр или сервлет).
Итак, для многопортового решения у меня есть:
@Configuration
public class EmbeddedTomcatConfiguration {
@Value("${server.additional-ports}")
private String additionalPorts;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
Connector[] additionalConnectors = additionalConnector();
if(additionalConnectors != null && additionalConnectors.length > 0) {
tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return tomcat;
}
private Connector[] additionalConnector() {
if(StringUtils.isNotBlank(additionalPorts)) {
return Arrays.stream(additionalPorts.split(","))
.map(String::trim)
.map(p -> {
Connector connector = new Connector(Http11NioProtocol.class.getCanonicalName());
connector.setScheme("http");
connector.setPort(Integer.valueOf(p));
return connector;
})
.toArray(Connector[]::new);
}
return null;
}
}
Теоретически, я мог бы зарегистрировать пользовательский LifecycleListener
для каждого разъема, но, насколько я знаю, это не поможет. Я также слышал кое-что о клапанах, хотя я не уверен, как реализовать их для каждого разъема.
Или, может быть, я иду совершенно неверным путем.
Я бы очень признателен любая помощь в этом вопросе.