Redisson配合JCache使用遇Redis ACL权限报错 如何配置内部key前缀适配
问题场景
- 项目接入共享Redis缓存服务时,数据库管理员为每个Redis账号配置了细粒度ACL安全策略,仅允许账号操作带有指定业务前缀的key,实现多租户间的权限隔离
- 实际使用Redisson库对接JCache标准缓存实现时,Redisson会自动生成无统一业务前缀的内部key,包括
jcache_sync、jcache_timeout:{name}等,这类key主要用于缓存节点状态追踪、过期key全生命周期管理 - 由于这类自动生成的内部key不在当前Redis账号的ACL授权范围内,执行缓存操作时会直接触发权限校验报错
适配方案
为Redisson全局配置自定义key前缀
- Redisson 3.16.0及以上版本提供了全局key前缀配置能力,配置后该前缀会同时作用于两类key:用户自定义的业务缓存key、Redisson全模块的内部功能key(含JCache模块生成的同步、超时追踪类key)
- 配置方式为在Redisson核心配置
Config对象中调用setKeyPrefix()方法,设置与ACL授权规则匹配的业务专属前缀。例如设置app_xxx:为全局前缀后,原本要生成的jcache_sync会被自动改写为app_xxx:jcache_sync,完全符合ACL的权限校验规则 - 该方案无需调整现有ACL策略,能从根源上保证Redisson生成的所有key都落在授权范围内
基于现有ACL规则补全最小权限
- 如果当前使用的Redisson版本暂不支持全局key前缀配置,可以联系数据库管理员,在现有ACL策略中为当前Redis账号追加JCache模块所需内部key的操作权限
- 需要追加授权的key通配规则包括:
jcache_sync*:用于JCache多节点间的缓存状态同步jcache_timeout:*:用于JCache过期事件的触发与追踪
- 授权时需要遵循最小权限原则,仅开放规则匹配的key读写权限,不要扩大授权范围破坏多租户隔离
注意事项
- 新增全局key前缀配置时,需要提前评估对存量历史缓存key的兼容性,已上线业务需要配套做key的平滑迁移,避免出现缓存读取失效
- 不要为绕过权限校验直接给Redis账号配置全key操作权限,会破坏共享Redis的安全隔离边界
内容的提问来源于stack exchange,提问作者Pouya Khoshkhoo
相关产品推荐
相关产品推荐

