返回信息流对于方案1,如果权限更新,是不是得重新登录才能更新权限呢,不可取。
方案2放在 redis 里面可靠一点吧
: 我的思路是:客户端向服务端发来请求,服务端在拦截器或filter 层解析请求头中的jwt token获取用户 id,然后根据用户 id 得到该用户权限列表,然后判断当前请求在不在里边。
: ............
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #6936643同步于 2024/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
Spring Security实现RBAC动态权限管理求助
IWhisper#969
2024/3/17镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
一般业界如何进行对用户权限的判断?
我的思路是:客户端向服务端发来请求,服务端在拦截器或filter 层解析请求头中的jwt token获取用户 id,然后根据用户 id 得到该用户权限列表,然后判断当前请求在不在里边。
但是这样会造成很大的性能问题,因为每条请求执行前,都需要查数据库或者缓存来判断是否有权限。
那么该怎么解决这个问题呢?是
①:在登录的时候就把用户角色或者权限放到 jwt 里、后续发来请求直接拿 jwt 中的角色或权限与当前请求做判断。
还是
②:登录的时候就把用户信息缓存到security 上下文或者内存(比如 用户 id 与权限列表对应的 map)或者缓存(比如 redis)里?
而且第二种方案在用户过多的情况下会不会导致内存不足呢?
对于方案1,如果权限更新,是不是得重新登录才能更新权限呢,不可取。
方案2放在 redis 里面可靠一点吧
: 我的思路是:客户端向服务端发来请求,服务端在拦截器或filter 层解析请求头中的jwt token获取用户 id,然后根据用户 id 得到该用户权限列表,然后判断当前请求在不在里边。
: ............
又想了想,发现考虑不周:两个方案,不论是每个用户的角色或权限存 jwt 里,还是存缓存里,本质上存的都是登录时刻获取到的权限信息,不能更新,无法做到动态权限管理,只能每次都实时查数据库了吗?如果想用缓存,该如何实现涉及联表查找(经典五表: user、role、permission 以及两个关联表)的情况下,更改权限数据库会实时生效
我现在能想到的就是:假如某个 user 对应的 role 发生变化(比如添加一个 role),就去 Redis 把这个用户的当前权限列表删掉,后端做权限查询的时候发现 Redis 没有,就去 db 重新查:假如某role 对应的权限变化,同理。