shiro的集群动态权限更新

shiro的动态权限,一般都是将权限放在数据库中,项目启动后将权限加载给shiro
当数据库的权限数据发生改变时,重新加载权限给shiro。
单机这样做没问题,但是当项目服务是集群的时候,比如有tomcat1,tomcat2,tomcat3,那么更新权限后,重新加载权限的操作只能落到一个tomcat上,比如落到tomcat1上了,那么tomcat1的权限是最新的,但tomcat2,tomcat3的权限却还是旧的。

争对这种问题,本文提供几种解决方案供参考:

1.穷举法(最low解)

当有权限资源更新时,多调几次重新加载权限的方法,尽量保证每个tomcat都能被调到。
这种方法最快,但也最扯,集群太多的时候,难免有遗漏,权限是个很关键的业务,不建议用这种不靠谱的穷举方式

2.第三方redis(最优解)

把shiro权限资源的保存改到redis上,每次从数据库加载权限到redis上,由于redis是唯一的,所以这样做肯定没问题。但要使用redis。
一般集群下shiro的session管理也是交给redis,一样的道理。

3.mq消费订阅(最快开发)

使用mq使用mq的发布订阅模式,每个tomcat启动时就订阅一个特定主题,当数据库的权限资源发生修改时,发布者发布一条这个主题的mq,那么每个tomcat订阅者就都会接到这个命令,接下来就各自加载更新各自的权限就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值