首先使用"JWT"的目的就是做服务端无状态,不想在服务端存储与用户"Session"有关的数据。而"JWT"内容仅是简单的Base64编码,故不宜存储敏感信息。一般存储用户ID,或者与用户ID唯一映射的一个字符串(隐藏数据库真实用户ID)。
再回到问题本身,可以考虑使用缓存的方式。比如有个专门封装的校验"是否被禁用?" "是否被删除?"
"权限是否发生变化?"的服务。这个服务只是网关层的一个小模块,具体实现可依赖Redis等缓存,加快校验速度。
假设Redis里面存储有 被禁用账号列表? 每次查询一下当前账号是否被禁用。若数据量较大时,还可进行分桶?布隆过滤器等手段优化。
延伸一下,这个流程很适合使用"责任链设计模式"啊。
附加信息比较多,感觉难以做一个通用的解决方案,大概率要根据实际业务来做具体设计。