Глобальная конфигурация CORS с использованием Java Config не работает в Spring MVC

Я пытаюсь использовать CROS глобально для всех моих Rest API, разработанных в проекте, и для того же я пытался сделать то же самое с глобальной конфигурацией CORS, используя Java Config. Ниже приведен класс конфигурации с аннотацией @Configuration.

package com.fs;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 *
 * @author 
 */
@Configuration
@ComponentScan("com.fs")
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter 
{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
           
      registry.addMapping("/**")
          .allowedOrigins("http://localhost:3000")
          .allowedMethods("POST", "GET",  "PUT", "OPTIONS", "DELETE")
          .allowedHeaders("X-Auth-Token", "Content-Type")        
          .maxAge(4800);
    }
}

Теперь я пытаюсь использовать API ниже, используя AX из приложения реагирования, работающего на https://localhost:3000, но оно не дает ответа и не создает сетевую ошибку.

Доступ к XMLHttpRequest по адресу «http://localhost:8089/ewamftrxnsws/purchase/getSchemeList» из источника «http://localhost:3000» заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: нет Заголовок Access-Control-Allow-Origin присутствует в запрошенном ресурсе.

let requestUrl = "http://localhost:8089/ewamftrxnsws/purchase/getSchemeList";
let promiseResponse = axios.post(requestUrl,{
        headers: {'Content-Type': 'application/json',}
       });
    promiseResponse.then(res=>{
        let isSuccess = res.data;
}).catch( error =>{
        console.log( "MFSchemeListApi catch => "+error);        
    });

В чем проблема ? Спасибо.


person PriyankaTopiwala    schedule 11.01.2021    source источник
comment
Как ясно сказано, вам нужно добавить Access-Control-Allow-Origin в вашу конфигурацию.   -  person Umeshwaran    schedule 11.01.2021
comment
добавил то же самое в конфигурацию, как показано ниже, но все еще не работает .allowedHeaders (X-Auth-Token, Content-Type, Access-Control-Allow-Origin) @Umeshwaran   -  person PriyankaTopiwala    schedule 11.01.2021
comment
Попробуйте allowedMethods("*")..allowedHeaders("*") вместо .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").allowedHeaders("X-Auth-Token", "Content-Type")   -  person Umeshwaran    schedule 11.01.2021
comment
все еще не работает, хотя конфигурация уровня контроллера работает @CrossOrigin(origins = "http://localhost:3000") @Umeshwaran   -  person PriyankaTopiwala    schedule 11.01.2021
comment
Пожалуйста, смотрите мой ответ. Это может помочь решить вашу проблему. Попробуйте   -  person Umeshwaran    schedule 14.01.2021


Ответы (2)


Проблема может быть из-за устаревшего WebMvcConfigurerAdapter . Попробуйте использовать WebMvcConfigurer.

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins(
                        "http://localhost:3000",..)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD")
                .allowCredentials(true)
        ;
    }

}

Это должно вернуть в запрос заголовок Access-Control-Allow-Credentials.

Надеюсь, это решит вашу проблему. Попробуйте !!!

person Umeshwaran    schedule 13.01.2021
comment
Это сработало! Спасибо. @Умешваран - person PriyankaTopiwala; 03.06.2021

из: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

Если вы используете Spring Security, обязательно включите CORS на уровне безопасности Spring, чтобы он мог использовать конфигурацию, определенную на уровне Spring MVC.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()...
    }
}
person Daniel Z.    schedule 11.01.2021