现在要做一个权限管理的功能,因为是集群环境部署。现在某一个管理员授权其他成员,需要做到即时生效。所以被授权的那个人必须要重新登录才能获取最新的权限信息。所以请问下如何在物理机X操作的同时强制物理机Y的某一个用户session过期。应用服务器是tomcat。
无法主动触发session失效;
另一种思路
1、建议把权限 单独找一个如Map缓存(可以选择LRU Map)存放 ;
key 是用户id value是权限;
2、当管理员修改权限时 自动把对于的缓存清除;
3、为了保证现有逻辑不修改,,可以写个filter 取对应权限 放到session中;
4、如果用户量不大 可以每次根据用户id自动查权限;
这个好像不能实现吧,非要做的话 只能用户每一步操作都读取一下数据库里面的权限信息了
用户通过合法途径退出程序时,及时注销session,这样session就能及时关闭。下次登录时重新读取用户信息。这样子应该是可以的。
如果只是对某些用户体验不好(不必大动干戈),可以把返回提示给用户的信息做的更加细化一些.
比如: 您没有此权限,此权限在XX秒之前被管理员修改了.
都已经是集群环境了, 现在的问题是缓存的同步问题吧。 你用什么缓存, 如果是ehcache 都有自动同步的功能了
要实现这个功能,必须自己管理session,而不是把session交给web容器管理,可以通过memcached存储session,利用xmemcached来操作session,具体怎么做自己去研究下。
用推,不用拉。
具体来说,每一个节点,都有一个通知更新的借口。
然后后台更新用户权限之后,后台程序马上调用每一个节点的更新借口。然后每一个节点机会刷新这个用户的最新权限。
这个方法比较简单。
之前的权限管理系统用 Spring Security,当时也遇到楼主的问题。security 是在用户登录之初将该用户对应的所有角色信息以及这些角色能操作的URL存储在一个Map 中,管理员修改对应角色的操作权限之后,要求实时更新这些角色对应用户的操作权限。做法就是flush 那个存储权限操作的Map,所有针对用户、角色以及权限的更新操作(增、删、改)之后,都调用一个公共接口对Map 去做flush 动作。这样就是实时的了。
当然以上我说的是用spring Security 的解决方法,如果我们自己写过滤器去做,那么可以考虑借用一下security 的思想,将用户的权限信息存储在一个Map 中。这样子,不用每次客户端请求过来都去DB中一层一层的查关联关系,DB压力小一点,你也晓得,从内存取数据快很多的嘛!
个人认为 页面实现不可能了 因为http是无状态的 你停留在页面 他就那样了 只能在服务器端做判断了 1缓存 2filter