常规登录逻辑在微服务中的问题
登录成功之后会将用户信息保存在Session中。但是Session也是一个对象(HashMap),也占用内存。微服务项目中,考虑到用户量特别大,会产生很多Session对象将服务器的内存消耗殆尽。
65535==Java项目中允许的最大的方法数 (一定要进行拆分)
同一个用户的Session只能在单独的服务器上被当前用户的方法共享。
总结:
微服务中的登录保存用户信息不能使用Session。
如何保存用户的登录状态?
Redis
使用Redis自定义Session。
1、如何保证所有服务器访问同一个Session
2、如何在一个服务器上登录之后,其他服务器都不需要登录?
实现单点登录的技术:
oauth2.0
jwt
自定义token(Redis中)
实现单点登录的步骤
1、启动Redis
2、写一个项目专门用来进行登录和鉴权,然后将登录和鉴权的接口暴露给其他服务。(微服务)
3、其他需要登录的服务,连接鉴权系统进行验证。
更新token过期时间
使用mq进行更新,延长token过期时间不属于业务逻辑代码的必要部分。更新过期时间不应该阻塞用户的业务代码,所以采用异步消息队列来完成。