项目重构前
公司的项目以springcloud做微服务开发,那么多个微服务项目怎么保存登录状态呢?不可能会员项目、商城项目、患者项目都要跳转微服务端信登录一次。
之前考虑的是sso单点登录,采用开源的cas框架。架构图如下:
这样也解决了微信登录的回调url只能设置一个的问题。
项目重构后
在公司决定重构项目后,架构师指出微服务去session也是重构的一部分,使用JWT代替session有一些好处,我总结如下:
- 去session,减少服务端内存开销。
- 去sso单点登录,减少维护项目,减少代码量。
- 减化登录流程,减少跳转次数。
- 解决更新用户信息后,可能导致的各项目存储的session不一致的问题(当然这个问题可以通过redis统一存储session解决,使用JWT就减少了redis的开销)。
- 后期可以将JWT解密和权限校验放在SpringCloud的网关zuul中,进一步解耦微服务。
- 使用网关后,微服务可以完全做成无状态的服务。
另外,有点可惜的是之前的单点登录项目被废弃,白做了。
下一节介绍JWT在项目中的使用。