Отключите безопасность метода 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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