С учетом : приложение углового интерфейса отправляет запросы в микросервис бэкэнда через микросервис шлюза.Бэкэнд находится в Spring Cloud.
Вопрос: как правильно настроить фильтры CORS, чтобы избавиться от следующей ошибки:
Access to XMLHttpRequest at 'http://gateway-service:5555/api/useful-service/myentities/' from origin 'http://localhost:4200' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:4200, http://localhost:4200', but only one is allowed.
Вот что я написал такfar:
Служба шлюза
Мой основной класс в сервисе шлюза имеет 3 аннотации: @SpringBootApplication, @EnableZuulProxy и @Configuration.Так как я не настраивал никакие параметры безопасности, я предполагаю, что Spring Security не используется, поэтому мне нужно настроить CorsFilter в Spring MVC.Я делаю это следующим образом (комментарии для будущих пользователей) :
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfig = new CorsConfiguration();
corsConfig.setAllowCredentials(true);
//corsConfig.addAllowedOrigin("http://localhost:4200");
corsConfig.addAllowedOrigin("*"); //wildcard that will simply copy the value of the request's Origin header
// into the value of the Response's Access-Control-Allow-Origin header, effectively allowing all origins.
// You can add specific origins instead if you wish to limit them.
corsConfig.addAllowedHeader("*");
corsConfig.addAllowedMethod("OPTIONS");
corsConfig.addAllowedMethod("HEAD");
corsConfig.addAllowedMethod("GET");
corsConfig.addAllowedMethod("POST");
corsConfig.addAllowedMethod("PUT");
corsConfig.addAllowedMethod("DELETE");
corsConfig.addAllowedMethod("PATCH");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", corsConfig);
return new CorsFilter(configSource);
}
Полезное обслуживание
Основной класс здесь аннотирован @EnableResourceServer и @SpringBootApplication.В соответствии с моими «бизнес-правилами» я хотел бы иметь авторизацию Spring (безопасность URL-адресов, а в будущем и безопасность методов), так как я настраивал Spring Security в целом и OAuth2, а в частности я должен также настраивать фильтр cors безопасности.Вот соответствующий фрагмент кода безопасности, который включает cors:
@Configuration
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.cors(); // by default uses a Bean by the name of corsConfigurationSource
}
}
И вот как я настраиваю функцию cors в Spring Security:
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH"));
configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Origin", "Content-Type", "Accept", "Authorization"));
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
К сожалению, я получил ошибку, упомянутую выше, если у вас естьИдея как это исправить пожалуйста сказка.