Spring security 以编程方式使用不同的Spring安全权限重新登录用户

Spring security 以编程方式使用不同的Spring安全权限重新登录用户,spring-security,Spring Security,预请求: 用户登录并获得使用自定义userService实现从数据库获得的角色。i、 e 身份验证提供程序用户服务ref=“securityPolicyService” 调用实现的方法loadUserByUsername,并为用户加载他们登录的特定俱乐部的角色,默认情况下第一次加载一个 然后,用户单击UI中的另一个俱乐部,我调用一个服务上的方法,该服务获取该俱乐部的新权限列表 然后,我执行以下操作: Object principle = SecurityContextHolder.getCont

预请求:
用户登录并获得使用自定义userService实现从数据库获得的角色。i、 e

身份验证提供程序用户服务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();
objectprinciple=SecurityContextHolder.getContext().getAuthentication().getPrincipal();
SecureMember sm=(SecureMember)原则;
身份验证验证=
新用户名PasswordAuthenticationToken(sm、null、newAuthories)

SecurityContextHolder.getContext().setAuthentication(auth)
request.getSession(false).invalidate();
SecureMember从SpringFramework扩展用户

问题是安全成员机构从未更新过新的机构

谢谢
Gary

如果HttpSession为空并且在请求过程中无效,则Spring Security不会存储安全上下文,因此如果在会话无效后设置上下文(并且不创建新会话),则不会存储该上下文

您应该看到是否是这种情况(并且启用了调试日志记录)


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

为什么要使会话无效?当您这样做时,用户不是正在注销吗?对不起,request.getSession(false).invalidate();在上面的代码被剪断之前调用。它不应该在那里。