以编程方式重置用户使用不同的Spring Security Authority

时间:2012-04-13 16:06:41

标签: spring-security

PREREQ:
用户使用userService的自定义实现登录并获得从数据库获得的角色。即。

  

authentication-provider user-service-ref =“securityPolicyService”

调用已实现的方法 loadUserByUsername ,并为用户登录的特定分会加载角色,第一次加载默认值。

用户然后从UI点击不同的俱乐部,我在服务上调用方法,获取该俱乐部的新权限列表。

然后我执行以下操作:

Object principle = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
SecureMember sm = (SecureMember) principle;
Authentication auth = 
      new UsernamePasswordAuthenticationToken(sm, null, newAuthories); <br><br>
    SecurityContextHolder.getContext().setAuthentication(auth);<br>
request.getSession(false).invalidate();

SecureMember从SpringFramework扩展用户。

问题是SecureMember权限永远不会更新。

感谢 加里

1 个答案:

答案 0 :(得分:0)

如果HttpSession为空且在请求期间无效,则Spring Security不会存储安全上下文,因此如果在使会话无效后设置上下文(并且不创建新会话),则它不会被存储。

如果是这种情况,您应该看到this log message(并且启用了调试日志记录)。

创建新会话或不使原始会话无效。