为什么打开Spring Session时会解码会话?

时间:2019-10-04 08:36:49

标签: session redis resttemplate spring-data-redis spring-session

我正在使用Redis作为存储来共享服务之间的会话。我在春季的微服务架构应用程序中使用下一个依赖项:

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();

并将其插入到我的拦截器中的cookie中。当我在本地测试我的应用程序且没有会话共享(即没有redis)时,所有程序都可以正常工作

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 ...但是为什么要对会话进行解码?必须对其进行编码。

0 个答案:

没有答案