Включение запросов Cross Origin Spring Spring - PullRequest
0 голосов
/ 16 января 2020

Я разрабатываю приложение, которое состоит из внутреннего приложения, разработанного с помощью Spring Boot, и внешнего приложения, разработанного с Angular 8. Теперь я хочу включить Cross Origin, чтобы позволить интерфейсу внешнего интерфейса вызывать API внутреннего интерфейса.
После Spring-документация о CORS Я написал следующий класс конфигурации:

@EnableWebSecurity
public class WebConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource()
    {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

Первой попыткой было установить AllowedOrigins на Arrays.asList("*").


Когда я вызываю API /dinners/ingredients из моего приложения Angular, я обнаружил в консоли следующую ошибку:

Доступ к XMLHttpRequest по адресу http://localhost: 8081 / обеды / ингредиенты? Page = 0 & pageSize = 10 'от источника' http://localhost: 4200 'заблокировано политикой CORS: нет' Access-Control-Allow-Origin ' заголовок присутствует на запрошенном ресурсе.
GET http://localhost: 8081 / обеды / ингредиенты? page = 0 & pageSize = 10 net :: ERR_FAILED


Я что-то упустил в конфигурации бэкэнда? Я не вижу заголовка «Access-Control-Allow-Origin» в ответе заголовка в «Почтальоне»:
postman

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Если вы ищете включение CORS только для целей разработки, вам следует рассмотреть возможность использования Angular Proxy

https://angular.io/guide/build#proxying -to-a-backend-server

Примечание. Включение CORS может подвергнуть ваше приложение уязвимости, очень точно укажите c, где включить CORS.

0 голосов
/ 16 января 2020

документация, которую вы разместили, относится к Spring Security 4.2 (вы можете видеть это в предоставленном вами URL), если вы посмотрите на более свежую документацию Spring Spring (5.x), вы увидите, что для стандартного реализованного фильтра Cors для настройки с внешним компонентом необходимо вызвать метод withDefaults().

Пружина конфигурации Cors 5.x

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // by default uses a Bean by the name of corsConfigurationSource
            .cors(withDefaults()) // <------ this part
            ...
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}
...