В моем текущем проекте мы развернули несколько Spring Boot 1.5.4.RELEASE
микросервисов в Openshift
с Kubernetes
.Мы настроили Apache Proxy Balancer:
From To
/msa/microname1 -> /
/msa/microname2 -> /
...
Недавно мы представили Spring Boot 2
и разработали новый микросервис с Kotlin
.Мы настроили балансировщик таким же образом, учитывая, что URL-адреса, такие как /health
и /info
, размещены в пути /actuator
.Теперь, когда мы используем любую конечную точку этого нового микросервиса (/health
или любую из наших конечных точек), у нас возникает ошибка, подобная этой:
org.springframework.security.web.firewall.RequestRejectedException:запрос был отклонен, поскольку URL не был нормализован ...
Путь, который мы перехватываем в нашем микросервисе, в начале имеет дополнительную косую черту: //<path_to_resource>
Когда я используюurl microservice Я получаю ресурс без проблем, но при использовании сопоставления прокси-балансировщика у нас возникает проблема, описанная выше.
Мы проверили наш прокси-балансировщик, и он настроен так же, как и другие.Есть ли какая-либо дополнительная конфигурация на Spring Boot 2
, которую мы должны рассмотреть?Может ли это быть проблема, связанная с Kotlin
?
Обновление
В качестве настройки мы настроили DefaultHttpFirewall, чтобы разрешить косую черту, связанную с URL, но это не исправляетпроблема с двойной косой чертой.Это только маскирует проблему.
@Bean
fun allowUrlEncodedSlash(): HttpFirewall {
var firewall: DefaultHttpFirewall = DefaultHttpFirewall()
firewall.setAllowUrlEncodedSlash(true)
return firewall
}
override fun configure(web: WebSecurity) {
web.httpFirewall(allowUrlEncodedSlash())
}