BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #6936643同步于 2024/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖

Spring Security实现RBAC动态权限管理求助

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