异步中的 SecurityUser Spring 个侦听器
SecurityUser in Async Spring Listeners
我遇到了一个问题,希望有人能给我一些建议。
我有一个允许 HTTP 请求的 restful Spring 应用程序。我正在使用 spring 安全并提供 oauth2。在我的基本服务中,由控制器调用,我通过以下方式获取当前登录的用户:
SecurityUser loggedUser = (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
到目前为止,一切正常。此外,我正在使用实现 org.springframework.context.ApplicationListener 接口的事件和事件侦听器。我以异步处理事件的方式配置了应用程序事件多播器(使用 SimpleAsyncTaskExecutor)。
当我尝试在我的侦听器中使用我的服务(以及依赖于当前登录用户的方法)时,出现了(明显的)问题。它们无法访问上下文,因为它们是异步工作的。因此,我无法获取当前用户。
请问如何解决问题?有没有比to
更多的选项
- 以某种方式保存和扩展上下文,以便异步侦听器可以
还能访问吗?如果可以,怎么做?
- 更改所有服务方法以通过参数移交用户
(而不是获取当前用户本身的服务)并存储
它的ID例如在活动中。
非常感谢。我自己
您可以使用 DelegatingSecurityContextAsyncTaskExecutor 而不是 SimpleAsyncTaskExecutor。问题是您只能在用户登录时获取用户的上下文。
我遇到了一个问题,希望有人能给我一些建议。 我有一个允许 HTTP 请求的 restful Spring 应用程序。我正在使用 spring 安全并提供 oauth2。在我的基本服务中,由控制器调用,我通过以下方式获取当前登录的用户:
SecurityUser loggedUser = (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
到目前为止,一切正常。此外,我正在使用实现 org.springframework.context.ApplicationListener 接口的事件和事件侦听器。我以异步处理事件的方式配置了应用程序事件多播器(使用 SimpleAsyncTaskExecutor)。
当我尝试在我的侦听器中使用我的服务(以及依赖于当前登录用户的方法)时,出现了(明显的)问题。它们无法访问上下文,因为它们是异步工作的。因此,我无法获取当前用户。
请问如何解决问题?有没有比to
更多的选项- 以某种方式保存和扩展上下文,以便异步侦听器可以 还能访问吗?如果可以,怎么做?
- 更改所有服务方法以通过参数移交用户 (而不是获取当前用户本身的服务)并存储 它的ID例如在活动中。
非常感谢。我自己
您可以使用 DelegatingSecurityContextAsyncTaskExecutor 而不是 SimpleAsyncTaskExecutor。问题是您只能在用户登录时获取用户的上下文。