Uso de proxy : en esta solución, ejecutaremos un proxy de modo que cuando la solicitud pase por el proxy, parezca que tiene el mismo origen. Si está utilizando el nodeJS , puede usar cors-anywhere para hacer el proxy. https://www.npmjs.com/package/cors-anywhere .
Ejemplo :
var host = process.env.HOST || '0.0.0.0';
var port = process.env.PORT || 8080;
var cors_proxy = require('cors-anywhere');
cors_proxy.createServer({
originWhitelist: [], // Allow all origins
requireHeader: ['origin', 'x-requested-with'],
removeHeaders: ['cookie', 'cookie2']
}).listen(port, host, function() {
console.log('Running CORS Anywhere on ' + host + ':' + port);
});
Lado del servidor: en el lado del servidor, debemos habilitar las solicitudes de origen cruzado. Primero, recibiremos las solicitudes Preflight (OPTIONS) y debemos permitir la solicitud que es el código de estado 200 (ok).
Las solicitudes verificadas previamente envían primero un encabezado de solicitud de OPCIONES HTTP al recurso en el otro dominio, para determinar si la solicitud real es segura de enviar. Las solicitudes de sitios cruzados se verifican de esta manera, ya que pueden tener implicaciones para los datos del usuario. En particular, una solicitud se verifica previamente si utiliza métodos distintos a GET o POST. Además, si POST se utiliza para enviar datos de solicitud con un tipo de contenido que no sea application / x-www-form-urlencoded, multipart / form-data o text / plain, por ejemplo, si la solicitud POST envía una carga XML al servidor usando application / xml o text / xml, la solicitud se verifica previamente. Establece encabezados personalizados en la solicitud (por ejemplo, la solicitud utiliza un encabezado como X-PINGOTHER)
Si está utilizando el resorte, solo agregar el siguiente código resolverá el problema. Aquí he deshabilitado el token csrf que no importa habilitar / deshabilitar de acuerdo a sus requerimientos.
@SpringBootApplication
public class SupplierServicesApplication {
public static void main(String[] args) {
SpringApplication.run(SupplierServicesApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
};
}
}
Si está utilizando la seguridad de primavera, use el código siguiente junto con el código anterior.
@Configuration
@EnableWebSecurity
public class SupplierSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll().antMatchers("/**").authenticated().and()
.httpBasic();
}
}