Рассмотрим это приложение на основе микросервисов , использующее Spring Boot 2.1.2 и Spring Cloud Greenwich.RELEASE :
- Каждый микросервисиспользует cookie JSESSIONID для идентификации своего собственного выделенного сеанса сервлета (т. е. глобальный уникальный сеанс не используется совместно с Spring Session и Redis).
- Внешние входящие запросы направляются Spring Cloud Gateway (и реестр Eureka, используемый через Spring Cloud Netflix, но это не должно быть актуально).
Когда Spring Cloud Gateway возвращает ответ микросервиса, он возвращает «Set-Cookie "как есть", то есть с тем же путем "/".
Когда клиент вызывает второй микросервис, JSESSIONID из первого микросервиса перенаправляется, но игнорируется (поскольку соответствующий сеанс существует только впервый микросервис).Таким образом, второй микросервис вернет новый JSESSIONID.Как следствие, первый сеанс потерян.
В итоге, каждый вызов в другой микросервис теряет предыдущий сеанс .
Я ожидал, что некоторые преобразования файлов cookie с помощью SpringCloud Gateway, но не нашел такой функции в документах.Не повезло и с Google.
Как мы можем это исправить (параметр конфигурации, который я мог пропустить, API для написания таких преобразований пути файлов cookie и т. Д.)?