Почему сеанс декодируется, когда Spring Session включен? - PullRequest
0 голосов
/ 04 октября 2019

Я использую Redis в качестве хранилища для обмена сессиями между службами. Я использую следующие зависимости в моих приложениях Spring в архитектуре микросервисов:

implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

Для вызова из одного сервиса в другой я использую Spring RestTemplate и перехватчик. Я получаю сеанс по:

ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
String sessionId = requestAttributes.getSessionId();

и вставляю его в куки в моем перехватчике. Все работает нормально, когда я тестировал свое приложение локально и без совместного использования сеанса, то есть без повторного использования:

spring.session.store-type=none

Но когда я тестировал с общим использованием сеанса redis (spring.session.store-type=redis), моя служба не может вызвать другую службу и получаетошибка (несанкционированная). В журналах без повторного ввода сеанс в закодированном виде, например SESSION = MGFlMGY5YmQtYmMzNS00Yzg0LTk3Y2YtYzcwZjM2ZDI2MTY0. Но когда я включаю поддержку redis в перехватчике, я получаю сеанс в декодированном формате UUID, например SESSION = 5fc03087-d265-11e7-b8c6-83e29cd24f4c. В моем перехватчике я кодирую сессию при включенном redis:

String encodedSessionId = new String(Base64.getEncoder().encode(sessionId.getBytes()));

И все работает отлично. Но я не понимаю, почему, когда Redis работает, сессия декодируется? Я понимаю, что используется DefaultCookieSerializer ... Но почему сеанс декодируется? Он должен быть закодирован.

...