V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
godleon
V2EX  ›  程序员

请教一下项目中如果大批量使用 token 获取当前用户会有什么弊端吗?

  •  
  •   godleon · 2023-04-20 13:40:48 +08:00 · 1642 次点击
    这是一个创建于 565 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    框架: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 信息,哪个合适一些

    4 条回复    2023-04-20 17:11:29 +08:00
    jiazhutianxiadiy
        1
    jiazhutianxiadiy  
       2023-04-20 15:58:28 +08:00   ❤️ 1
    为什么不问问神奇海螺
    xinglihua93
        2
    xinglihua93  
       2023-04-20 16:01:01 +08:00 via Android
    获取客户什么信息?
    timethinker
        3
    timethinker  
       2023-04-20 16:02:04 +08:00
    没什么问题,当你从用户的请求中,获取经过认证(登录)以后颁发给客户端的 token ,然后通过这个 token 来获取在认证时关联的用户信息,这是很常见的做法。缓存在这里不是重点,你可以通过 token 从缓存里面去取,也可以从数据库里面去查询,每一个请求都需要根据 token 来识别当前的请求者是谁。

    如果你不想在每个请求里面都去查询状态,你也可以使用 JWT ,经过私钥签名的 JWT 可以通过公钥直接校验,从而信任 JWT 里面编码的信息(注意 JWT 携带的信息是非隐私信息,只经过了简单 Base64 编码),这样你就可以无需借助缓存或者数据库的请求得知当前的请求者是谁。
    LykorisR
        4
    LykorisR  
       2023-04-20 17:11:29 +08:00
    如果只是单纯的关联一些不会变动的数据比如说 uid 那没有问题,和 cookie 其实差不多,但如果你是直接缓存了 User 的全部信息,那你 User 表里的东西更新的时候要不就强制登出用户强制其刷新(用户体验极差,但是能用),要不就手动更新缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3400 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:27 · PVG 19:27 · LAX 03:27 · JFK 06:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.