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