老师请问一下如果换成JWT之后RBAC hasPremission获取到的principal是一个字符串要怎么解决?

来源:7-4 基于数据库Rbac数据模型控制权限

jiiiiiin

2019-04-22


如上图所示,如果是使用jwt来做认证;
在RBAC对应表达式判断方法中获取到的principal就是一个字符串(用户名),如果是非JWTtoken,而是普通的存储在redis中的默认token是正常的,那这种情况,我是不是还要去数据库查一遍,初始化我的UserDetails对象,如果是这样的话成本太高;
因为我看了 目前authentication对象里面只有标准的角色信息;
~~
这种情况要怎么解决呢 老师?

写回答

1回答

JoJo

2019-04-28

把用户的权限信息以用户名为key存在缓存里,然后直接从缓存拿到权限信息做判断。

1
2
jiiiiiin
嗯 可能需要向您说这样,不然通过DefaultUserAuthenticationConverter会导致二次数据库查询问题,即效率问题,类似https://juejin.im/post/5c9191785188252d7941f87c 这篇文章讨论的问题
2019-05-06
共2条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程