框架:jdk-8, springcloud-alibaba + security auth2
1.auth 服务进行鉴权,重写 security 接口,来自定义认证和生成 token ,把项目里的 User 表的信息,跟 token 关联,缓存到 redis 2.客户端登陆以后颁发 token,然后所有后台接口,通过 security.getUser(),拿到缓存里的用户信息
1.项目里很多表关联了 User 里的主键,百分之 80 的接口,都是在接口里 使用上面的方式拿到缓存的 user 在取出主键,在进行连表查 2.如果上线后多实例 多 redis 节点,会有弊端吗?
ps: 对比客户端登录以后,在调一个 GetInfo ,来拿到 User 信息,哪个合适一些
1
jiazhutianxiadiy 2023-04-20 15:58:28 +08:00 1
为什么不问问神奇海螺
|
2
xinglihua93 2023-04-20 16:01:01 +08:00 via Android
获取客户什么信息?
|
3
timethinker 2023-04-20 16:02:04 +08:00
没什么问题,当你从用户的请求中,获取经过认证(登录)以后颁发给客户端的 token ,然后通过这个 token 来获取在认证时关联的用户信息,这是很常见的做法。缓存在这里不是重点,你可以通过 token 从缓存里面去取,也可以从数据库里面去查询,每一个请求都需要根据 token 来识别当前的请求者是谁。
如果你不想在每个请求里面都去查询状态,你也可以使用 JWT ,经过私钥签名的 JWT 可以通过公钥直接校验,从而信任 JWT 里面编码的信息(注意 JWT 携带的信息是非隐私信息,只经过了简单 Base64 编码),这样你就可以无需借助缓存或者数据库的请求得知当前的请求者是谁。 |
4
LykorisR 2023-04-20 17:11:29 +08:00
如果只是单纯的关联一些不会变动的数据比如说 uid 那没有问题,和 cookie 其实差不多,但如果你是直接缓存了 User 的全部信息,那你 User 表里的东西更新的时候要不就强制登出用户强制其刷新(用户体验极差,但是能用),要不就手动更新缓存
|