1、前言
很多Spring Boot应用使用了Session作为缓存,一般会在用户登录后保存用户的关键信息,如:
- 用户ID。
- 用户名。
- 用户token。
- 权限角色集合。
- 等等。。。 在管理员修改了用户的权限后,希望能立即生效。此时,会发现一个问题,管理员的HTTP请求对象,只能获取自己的Session对象,而无法获取用户的Session对象。这样对已登录的用户、或Session未过期的用户似乎没有办法实现动态权限变更。 当然,并不是真的没有办法,通常的做法,可使用Spring Security插件框架来实现动态权限变更。 这里,提供了另一种思路,即利用ServletContext对象的共享特性,来实现用户权限变更的信息传递。
2、总体思路
建立一个用户变更字典globalChangeMap(Map
对globalChangeMap作为核心进行封装,作为变更服务类ChangeService,提供必要的接口方法。
将ChangeService加入ServletContext对象中,实现全局共享。
如果管理员修改了某个用户的权限后,则在globalChangeMap中加入一条变更数据。
而AuthorizationAspect切面类,该切面类负责token认证、权限认证。现在先检查globalChangeMap有无变更记录,如果有,表示要查询并更新用户权限,并将新的权限角色集合更新到Session中,最后移除globalChangeMap中该用户的变更数据。对于本次拦截的请求,则可根据新的权限配置进行处理。
Original: https://www.cnblogs.com/alabo1999/p/14939327.html
Author: 阿拉伯1999
Title: 利用ServletContext,实现Session动态权限变更
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644231/
转载文章受原作者版权保护。转载请注明原作者出处!