Я следовал документации о том, как защитить REST-репозитории с помощью @PreAuthorize
. Тем не менее, ApplicationRunner
должен выполнить доступ к следующему репозиторию
@PreAuthorize("hasRole('ROLE_ADMIN')")
@RepositoryRestResource
public interface RouteRepository extends SortingOnlyRepository<Route, Long> {
}
для выполнения некоторых задач начальной настройки после запуска приложения.
@Component
public class RouteBuilder implements ApplicationRunner {
private final RouteRepository repository;
public RouteBuilder(RouteRepository repository) {
this.repository = repository;
}
@Override
public void run(ApplicationArguments args) throws Exception {
repository.findAll()
.stream()
// do something
;
}
}
Поскольку контекст безопасности не активен, когда это запускается приложение, приложение не запускается вообще
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.IllegalStateException: Failed to execute ApplicationRunner
Caused by: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
Какие есть варианты для правильного доступа к репозиторию REST? Я имею в виду
- Заполнение подделка
Authentication
как это - Отделить проблемы и просто не использовать REST репозиторий для этого варианта использования
- Настройка безопасности только за
WebSecurityConfig