问题复现
开始项目后端只有一个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