В 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
Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-boot-3