【问题标题】:SecurityUser in Async Spring Listeners异步 Spring 侦听器中的 SecurityUser
【发布时间】:2016-02-25 13:05:25
【问题描述】:

我面临一个问题,希望有人能给我一些建议。 我有一个允许 HTTP 请求的宁静 Spring 应用程序。我正在使用 spring security 并提供 oauth2。在由控制器调用的基本服务中,我通过以下方式获取当前登录的用户:

SecurityUser loggedUser = (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

到目前为止,一切正常。此外,我正在使用实现 org.springframework.context.ApplicationListener 接口的事件和事件侦听器。我将应用程序事件多播器配置为异步处理事件的方式(使用 SimpleAsyncTaskExecutor)。

当我尝试在我的侦听器中使用我的服务(以及依赖于当前登录用户的方法)时,就会出现(明显的)问题。他们无法访问上下文,因为他们正在异步工作。因此,我无法获取当前用户。

您能提供任何解决问题的建议吗?还有更多的选择吗

  • 以某种方式保存和扩展上下文,以便异步侦听器可以 仍然访问它?如果有,该怎么做?
  • 更改所有服务方法以通过参数移交用户 (而不是获取当前用户本身的服务)并存储 它的 id 例如在活动中。

非常感谢。我自己

【问题讨论】:

    标签: java spring asynchronous listener security-context


    【解决方案1】:

    您可以使用 DelegatingSecurityContextAsyncTaskExecutor 而不是 SimpleAsyncTaskExecutor。问题是您只能在用户登录时获取用户的上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-19
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2018-06-09
      • 2012-02-17
      • 2015-11-06
      相关资源
      最近更新 更多