Spring Security :Как правильно вызывать метод, защищенный с помощью @PreAuthorize, в фоновой задаче?

У меня есть метод, защищенный с помощью @PreAuthorize

@PreAuthorize("hasRole('ROLE_ADMIN') and (#action.userId != principal.id)")
public void execute(EditAction action)

Теперь мне нужно вызвать этот метод из фоновой задачи. Если я просто запускаю этот код -, я получаю исключение:

AuthenticationCredentialsNotFoundException :Объект аутентификации не был найден в SecurityContext

Кажется, мне нужно установить требуемую аутентификацию в SecurityContext. Я могу:

  1. написать собственный AuthenticationToken для фоновых задач.
  2. Используйте UsernamePasswordAuthenticationToken с поддельным пользователем.
  3. Не используйте защищенные методы в фоновых задачах.
  4. Любые другие рекомендации?

Как правильно?

6
задан Soumen Mukherjee 25 September 2019 в 17:44
поделиться