Я использую решение с Spring Cloud Zuul и Eureka.Приложение REST регистрируется в Eureka, а Zuul обеспечивает доступ к Сервису через Eureka Service Discovery.
Мне пришлось настроить приложение REST для приема закодированной косой черты в URL:
System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
Дляпримите закодированную черту в приложении Spring Boot REST и:
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
DefaultHttpFirewall firewall = new DefaultHttpFirewall();
firewall.setAllowUrlEncodedSlash(true);
return firewall;
}
@Override
public void configure(WebSecurity web) throws Exception {
web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
}
In WebSecurityConfigurerAdapter
для той же цели.И:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setUrlDecode(false);
configurer.setUrlPathHelper(urlPathHelper);
}
В WebMvcConfigurer
для пропуска декодирования кодированных символов url.
После этого только приложение REST начало нормально отвечать на запрос с закодированной косой чертой.Когда я соединил приложение REST с Zuul, шлюзом, проблема произошла с косой чертой, повторяется снова.Я выполнил ту же настройку REST-приложения с Zuul плюс свойство decode-url: false
в application.yml, и комбинация Zuul и REST-приложения снова сработала.
Когда я добавил решение обнаружения сервисов / регистрации сервисов с помощью Eureka,проблема началась снова.Я много искал, даже клонировал Spring Cloud Netflix Eureka Server 2.1.0.RELEASE и Eureka Core 1.9.8 , но не смог найти никакого решения.
Как отключить декодирование косой черты в Эврике, закодированной в URL?