【问题标题】:Update Principal in Session when using Spring-Session使用 Spring-Session 时更新 Session 中的 Principal
【发布时间】:2016-03-21 22:32:24
【问题描述】:

我们用我们自己的用户对象扩展了主体。这样,每个请求都可以使用该对象。 当用户更新他的信息时,主体需要使用这些新数据进行更新。不使用 spring-session 时,this method works。但是,对于 spring-session,它不会。

我检查了spring-session代码,RedisOperationsSessionRepository:save(RedisSession session)只调用session.saveDelta(),它只保存更改的属性。那么,我们如何更新会话中的委托人呢?

注意——主体更新的地方是在服务层,所以我们无权访问SessionAuthenticationStrategy

【问题讨论】:

    标签: spring spring-security spring-session


    【解决方案1】:

    找到了一种方法,所以回答我自己的问题。 Spring-security 将上下文作为属性存储在HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY 中。因此,手动更新密钥(而不是通过 Spring-Session)会导致 Principal 被更新。

    httpSession.setAttribute(
      HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
      SecurityContextHolder.getContext()
    );
    

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2016-03-03
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多