Я разрабатываю угловое приложение с пружинным веб-флюксом.До сих пор CorsFilter работал нормально и разрешал запросы от внешнего интерфейса.
Затем я добавил SecurityConfig.С тех пор CorsFilter перестал работать, и я получаю исключение в угловом приложении:
Доступ к XMLHttpRequest в «http://localhost:8080/users/999/folders/%2F/media/' от источника» http://localhost:4200' был заблокирован CORSполитика: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin»
Этот фильтр работал нормально:
@Configuration
public class CorsFilter {
private static final String FRONTEND_LOCALHOST = "http://localhost:4200";
private static final String FRONTEND_STAGING = "https://somehost.github.io";
@Bean
CorsWebFilter corsWebFilter() {
CorsConfiguration corsConfig = new CorsConfiguration();
corsConfig.applyPermitDefaultValues();
corsConfig.addAllowedMethod(HttpMethod.PUT);
corsConfig.addAllowedMethod(HttpMethod.DELETE);
corsConfig.setAllowedOrigins(Arrays.asList(FRONTEND_LOCALHOST, FRONTEND_STAGING));
UrlBasedCorsConfigurationSource source =
new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfig);
return new CorsWebFilter(source);
}
}
Затем я добавил авторизацию (токен на предъявителя) со следующим SecurityConfig:
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
public class SecurityConfiguration {
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
http.cors().and().csrf()
.csrfTokenRepository(CookieServerCsrfTokenRepository.withHttpOnlyFalse())
.and()
.authorizeExchange()
.anyExchange().authenticated()
.and()
.oauth2ResourceServer()
.jwt();
return http.build();
}
Кажется, с настройкой безопасности мой CorsFilter больше не учитывается.Я красный, что Corsfilter нужно добавить в конфигурацию, но примеры, которые я нашел, не сработали.Я надеюсь, что кто-то может помочь и знает, почему.
РЕДАКТИРОВАТЬ: Для решения проблем дублирования: я уже пытался добавить cors()
и cors().configurationSource(corsConfig())
в мою конфигурацию безопасности, но тоже не помогло.