Отключите безопасность метода Spring для модульных тестов с помощью Spring Boot 3.JAVA

Программисты JAVA общаются здесь
Anonymous
Отключите безопасность метода Spring для модульных тестов с помощью Spring Boot 3.

Сообщение Anonymous »

Я использую @PreAuthorize для методов в интерфейсах служб. Эти сервисы используются классами @RestController
В Spring Boot 2.x я включил безопасность метода в автоконфигурации с помощью @EnableGlobalMethodSecurity(prePostEnabled = true)
В некоторых @SpringBootTest мы концентрируемся на тестировании функциональной логики и не заботимся о безопасности методов. Эти тесты не вызывают службу отдыха или класс контроллера. Они напрямую вызывают метод из вышеупомянутых классов обслуживания, которые помечены @PreAuthorize. В этих тестах мы отключили безопасность метода

Код: Выделить всё

@EnableAspectJAutoProxy
class MyTestApplication extends MySringBootApplication {

@Bean
public GeFaJwtInterceptorTestAspect jwtInterceptorTestAspect() {
return new GeFaJwtInterceptorTestAspect();
}

@Bean
@Primary
SecurityMetadataSource disableMethodSecurityForUnitTest() {
return new DefaultFilterInvocationSecurityMetadataSource(Maps.newLinkedHashMap());
}
}
Это отлично работает.
После перехода на Spring Boot 3 я теперь использую @EnableMethodSecurity.
Как отключить метод безопасности Spring в модульных тестах?
Я прочитал статью https://docs.spring.io/spring-security/ ... orization/ метод-security.html#enable-annotation, но не нашел там решения.
Я попробовал
  • с помощью @EnableMethodSecurity(prePostEnabled = false) в MyTestApplication
  • добавление компонента в мою тестовую конфигурацию

    Код: Выделить всё

      @Bean
    @Primary
    @Order(Ordered.HIGHEST_PRECEDENCE)
    AuthorizationManager disableMethodSecurityForUnitTest1() {
    return (authentication, object) -> new AuthorizationDecision(true);
    }
    
Но это не сработало. Каждая попытка приводит к одному из следующих исключений:

Код: Выделить всё

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext

org.springframework.security.access.AccessDeniedException: Access Denied
В настоящее время мое единственное решение — добавить @WithMockUser для каждого метода тестирования, а это не то, что мне нужно, поскольку я хочу тестировать только функциональную логику. (Безопасность метода также тестируется, но на другом уровне нашего приложения.)

Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-boot-3

Вернуться в «JAVA»