利用ServletContext,实现Session动态权限变更

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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球