多个spring项目被Session共享

33 阅读1分钟

问题复现

开始项目后端只有一个WEB应用,后面因为某些原因分成了两个,然后在一次测试中,竟然发现两个项目的session在两个项目的前端可以通用,而不会退出,从而引发了一些未知的安全性的问题。

排查问题

首先想到的是项目使用了共同的缓存,查看了session相关的代码,都是使用HttpServletRequest从中直接取session的,虽然两个项目使用的session key是一致的,但是使用的是两个WEB项目,然后竟然就放弃了这个猜想。

后续又找了一会原因,还是没有发现问题所在,幸好在同事的提醒下,发现项目中引入了

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>

这个包的出现会自动将spring的session交由redis进行管理,由此才找到问题

解决方案

方案一是直接放弃使用上面引入的redis包

方案二是session加上命名空间,如下

spring:
session:
  redis:
    #redis的命名空间,防止与其他应用冲突
    namespace: name:session