我正面临一个问题,希望有人可以给我一些建议。 我有一个宁静的Spring应用程序,它允许HTTP请求。我正在使用spring security并提供oauth2。在我的基本服务中,由控制器调用,我通过以下方式获取当前登录的用户:
SecurityUser loggedUser = (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
到目前为止,这一切都正常。此外,我正在使用实现org.springframework.context.ApplicationListener接口的事件和事件侦听器。我将应用程序事件多播器配置为异步处理事件的方式(使用SimpleAsyncTaskExecutor)。
当我尝试在我的监听器中使用我的服务(以及依赖当前登录用户的方法)时,会出现(明显的)问题。他们无法访问上下文,因为他们正在异步工作。因此,我无法获取当前用户。
您能否提出如何解决问题的建议?是否有比
更多的选择非常感谢你。自己
答案 0 :(得分:0)
您可以使用DelegatingSecurityContextAsyncTaskExecutor而不是SimpleAsyncTaskExecutor。问题是您只能在用户登录时获取用户的上下文。