Java 如何获取执行异步方法的用户?

Java 如何获取执行异步方法的用户?,java,spring,asynchronous,spring-security,Java,Spring,Asynchronous,Spring Security,我有一个运行许多异步进程的应用程序,这些进程可能需要十到二十分钟 在出错时,我使用一个AsyncUncaughtExceptionHandler,它只写一个日志错误。我需要通知用户发生了错误 现在我使用的是“DelegatingSecurityContextAsyncTaskExecutor”,它在线程之间共享spring安全用户。但当我注销时,它被删除,上下文中的用户为空 这对我来说不是很好,我希望运行该方法的用户,而不是上下文中的当前用户,我需要他向您的个人邮箱发送消息 如何获取执行该方法的

我有一个运行许多异步进程的应用程序,这些进程可能需要十到二十分钟

在出错时,我使用一个AsyncUncaughtExceptionHandler,它只写一个日志错误。我需要通知用户发生了错误

现在我使用的是“DelegatingSecurityContextAsyncTaskExecutor”,它在线程之间共享spring安全用户。但当我注销时,它被删除,上下文中的用户为空

这对我来说不是很好,我希望运行该方法的用户,而不是上下文中的当前用户,我需要他向您的个人邮箱发送消息

如何获取执行该方法的用户

我的代码:

@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {

    @Override
    @Bean(name = "asyncExecutor")
    public Executor getAsyncExecutor() {

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(1);
        executor.setThreadGroupName("MyCustomExecutor");
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setBeanName("asyncExecutor");
        executor.initialize();

        DelegatingSecurityContextAsyncTaskExecutor securityExecutor = new DelegatingSecurityContextAsyncTaskExecutor(executor);

        return securityExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new CustomAsyncExceptionHandler();
    }

}

public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {

    private static final Logger LOG = LogManager.getLogger(CustomAsyncExceptionHandler.class);

    @Override
    public void handleUncaughtException(Throwable ex, Method method, Object... params) {
        LOG.error(
                String.format("Error in async method %s with params: %s: Excepcion: %s",
                        method.getName(), params.toString(), ExceptionUtils.getStackTrace(ex)), ex);
    }
}

我猜您的注销tell的spring安全性将使用户登录无效。我猜您的注销tell的spring安全性将使用户登录无效。