在推广用户后重新验证用户

时间:2015-03-07 04:45:33

标签: spring-security spring-3

你有一个应用程序在Spring mvc 3和Spring Security 3.发生我决定提升用户(我有一个用户,角色和user_role表的数据库),但是当我将新角色添加到数据库时出现问题,如何在不注销用户的情况下更新主要权限?寻找答案我发现了这个:

// update database with new role
//... you fill in this part

// update the current Authentication
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>  (auth.getAuthorities());
authorities.add(new GrantedAuthorityImpl('ROLE_NEWROLE'));
Authentication newAuth = new UsernamePasswordToken(auth.getPrincipal(),auth.getCredentials(),authorities)
SecurityContextHolder.getContext().setAuthentication(newAuth);

现在,这种方法看起来不错,但我的问题是,鉴于securitycontextholder将相关信息检索给调用他的当前用户,如何从我的管理员帐户向系统中的每个用户应用上述代码? 我正在使用自己的身份验证提供程序。

1 个答案:

答案 0 :(得分:0)

一种选择是实施以下策略:

  1. 保留其角色已被修改的用户的全局注册表。这可以使用ConcurrentHashMap(如果您有多个应用服务器,则使用分布式缓存)来实现。
  2. 一旦管理员更改了用户的角​​色,请将用户(其角色已更改)主体(电子邮件地址,用户名等)推送到此注册表。
  3. 编写一个过滤器,检查注册表中当前用户的主体。如果主体位于注册表中,则过滤器将刷新用户的角色,然后从注册表中删除主体。然后照常处理剩下的请求。