Я использую Jhipster 4.14.4
Я пытаюсь создать запланированную задачу @, которая будет выполнять определенные действия, требующие прав администратора.
Проблема в том, что по умолчанию при запуске программы не устанавливается аутентификация в контексте основного потока, если кто-то не входит в систему через сайт (или не вызывает "api / authenticate").
Я ищу безопасный способ передачи полномочий ADMIN_ROLE моему методу @scheduled, чтобы он мог выполнять необходимые действия, но он не будет "просачиваться" в любом случае, о котором я не могу думать другие пользователи.
Мне также нужно, чтобы этот метод был изолирован от любого имени пользователя, которое может установить аутентификацию в контексте основного потока, потому что тогда он не сможет выполнить соответствующую задачу.
На данный момент я изменил класс AsyncConfiguration следующим образом:
реализован интерфейс SchedulingConfigurer:
@Configuration
@EnableAsync
@EnableScheduling
public class AsyncConfiguration implements AsyncConfigurer, SchedulingConfigurer
Добавлен новый bean-компонент «scheduleTaskExecutor» (помимо существующего по умолчанию «taskExecutor»):
@Bean(name = "scheduledTaskExecutor")
public Executor scheduledTaskExecutor() {
ScheduledExecutorService delegateExecutor = Executors.newSingleThreadScheduledExecutor();
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication = new UsernamePasswordAuthenticationToken("{admin_username}","{admin_password}");
context.setAuthentication(authentication);
return new DelegatingSecurityContextScheduledExecutorService(delegateExecutor, context);
}
Переопределите метод ConfigureTasks () интерфейса SchedulingConfigurer и установите новый планировщик, который я создал:
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(scheduledTaskExecutor());
}
В результате возникает ошибка, что необходима полная аутентификация .
org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource
Затем я попытался внедрить AuthenticationManager и использовать его для создания объекта аутентификации:
Authentication authentication = this.authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("{admin_username}","{admin_password}"));
Но то, что я получил, было:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method liquibase in
net.myCompany.myApp.config.DatabaseConfiguration required a bean of type
'org.springframework.core.task.TaskExecutor' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.core.task.TaskExecutor' in your configuration.
Process finished with exit code 0
Буду очень признателен вам за помощь в этом вопросе.
Спасибо!