异步Spring侦听器中的SecurityUser

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

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

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

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

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

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

非常感谢你。

奥斯卡

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章