是的,使用一个服务登录。
可以使用spring-session,设置SessionRepository接口将session存储方式改成redis以便不同服务都可访问,然后将session
id返回给前端,前端带着sessionId访问任意服务,任意服务都拿着sessionId的,去redis查找。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240926/c0e893c1dab4fdd32ed23121de23bcf1.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240926/8b1a0974468ca09dd53692f59cbcb09d.png)
sessionId可以放到cookie或者header中
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240926/5bc0f7aa2fecddf159e2ccc9b52b29e0.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240926/20f18c6dc1bbacc1bf910048bd10529d.png)
注意:每个项目都需要引入spring-session并且配置一样,HttpSessionIdResolver从cookie或者header读取sessionId,然后SessionRepository从redis根据sessionId读取session,这样就实现了多个服务共享session的功能,也就是单点登录的功能。
SessionRepository的实现还有jdbc可以将session存到数据库,如果你三个服务在一台电脑部署,甚至可以自定义一个SessionRepository,将session存储到文件中,以供多个服务共享。