Я асинхронно вызываю метод в Spring, используя @Async.Этот метод вызывает другой метод, помеченный @PreAuthorize, Spring Security Annotation. Чтобы авторизация MODE_INHERITABLETHREADLOCAL
, мне нужно установить режим SecurityContextHolder
в MODE_INHERITABLETHREADLOCAL
, чтобы информация аутентификации передавалась асинхронному вызову. Пока все отлично работает.
Однако, когда я выхожу из системы и входю в систему как другой пользователь, в асинхронном методе SecurityContextHolder хранит информацию аутентификации старого пользователя, который вышел из системы. Это вызывает, конечно, нежелательное исключение AccessDenied
. Нет такой проблемы с синхронными вызовами.
Я определил <task:executor id="executors" pool-size="10"/>
, поэтому может быть проблема в том, что после инициализации потока в пуле исполнителей он не будет переопределять информацию аутентификации?