码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-06-28 19:07:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:glob   种类型   servlet   需要   建立   等等   请求   用户登录   关系   

1、前言

很多Spring Boot应用使用了Session作为缓存,一般会在用户登录后保存用户的关键信息,如:

  • 用户ID。

  • 用户名。

  • 用户token。

  • 权限角色集合。

  • 等等。。。

    在管理员修改了用户的权限后,希望能立即生效。此时,会发现一个问题,管理员的HTTP请求对象,只能获取自己的Session对象,而无法获取用户的Session对象。这样对已登录的用户、或Session未过期的用户似乎没有办法实现动态权限变更。

    当然,并不是真的没有办法,通常的做法,可使用Spring Security插件框架来实现动态权限变更。

    这里,提供了另一种思路,即利用ServletContext对象的共享特性,来实现用户权限变更的信息传递。

2、总体思路

建立一个用户变更字典globalChangeMap(Map<Integer,Integer>类型)作为userId与changeFlag的映射关系,其中changeFlag暂时没有意义。如果需要通知信息类型超过1种,不足32种,可将changeFlag按位编码,每位表示一种变更类型。还是先假设只有权限变更这一种类型。

对globalChangeMap作为核心进行封装,作为变更服务类ChangeService,提供必要的接口方法。

将ChangeService加入ServletContext对象中,实现全局共享。

如果管理员修改了某个用户的权限后,则在globalChangeMap中加入一条变更数据。

而AuthorizationAspect切面类,该切面类负责token认证、权限认证。现在先检查globalChangeMap有无变更记录,如果有,表示要查询并更新用户权限,并将新的权限角色集合更新到Session中,最后移除globalChangeMap中该用户的变更数据。对于本次拦截的请求,则可根据新的权限配置进行处理。

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

标签:glob   种类型   servlet   需要   建立   等等   请求   用户登录   关系   

原文地址:https://www.cnblogs.com/alabo1999/p/14939327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!