es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La configuración de CORS no funciona. No es posible acceder a los recursos.

Quiero implementar aplicaciones SpringBoot en un servidor remoto y acceder a ellas. Estoy intentando lograr esto con CORS, pero no puedo acceder a los recursos porque obtengo un error CORS.
Tengo los siguientes 3 componentes:

  1. Api – se ejecuta en el puerto 8080 (implementado con SpringBoot fat jar)
  2. Engine – se ejecuta en el puerto 8086 (implementado con SpringBoot fat jar)
  3. Ui – se ejecuta en el puerto 8087 (implementado con war)

Solución intentada.
1) Usando WebMvcConfigurer en el controlador.

MyController.java

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/auth")
public class MyController {
@PostMapping("/signin")
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest) {
    // lógica del negocio
}

@PostMapping("/signout")
public ResponseEntity<?> signOutUser(@Valid @RequestBody LogoutRequest logoutRequest) {
    // lógica del negocio
}

@SuppressWarnings("deprecation")
@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("http://localhost:8087","http://localhost:8086");
        }
    };
}

2) Agregando la siguiente configuración en la clase de configuración

@Bean
CorsConfigurationSource corsConfigurationSource()
{
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("http://localhost:8087"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST","PUT","DELETE","PATCH"));
    configuration.setMaxAge((long) 3600);
    configuration.setAllowCredentials(true);
    configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "X-Auth-Token"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Error de UI:
Fallo de la solicitud HTTP para http://localhost:8080/api/auth/signin: 0 Error desconocido

Llamada en red:
Error de intercambio de recursos de origen cruzado: PreflightInvalidStatus

Ninguna de las soluciones anteriores funcionó para mí. Cualquier indicación relacionada con CORS es útil.
¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que has intentado habilitar CORS en tu aplicación SpringBoot usando dos enfoques diferentes, pero aún enfrentas problemas relacionados con CORS al intentar acceder a recursos desde un servidor remoto. Aquí hay algunas indicaciones que pueden ser útiles para ti:

    1. Asegúrate de que el servidor remoto que aloja tu aplicación permita las solicitudes CORS desde el dominio de tu cliente. Si estás accediendo a tu aplicación desde un dominio diferente, el servidor que aloja tu aplicación necesita permitir explícitamente las solicitudes entre orígenes. Puedes agregar el dominio remoto en tu configuración de CORS para habilitar esto.

    2. Intenta usar una configuración CORS más permisiva con fines de prueba. Puedes establecer el atributo allowedOrigins en “” para permitir solicitudes desde cualquier origen, y el atributo allowedMethods en ““, para permitir cualquier método HTTP. Esto no se recomienda para entornos de producción, pero puede ayudarte a aislar el problema.

    3. Verifica si hay algún proxy HTTP o balanceador de carga entre el cliente y el servidor que pueda interferir con las solicitudes CORS. Estos intermediarios pueden modificar o eliminar las cabeceras CORS, lo que causa problemas con tus solicitudes. Asegúrate de que estos intermediarios estén configurados para enviar las cabeceras CORS relevantes.

    4. Verifica si tu código del lado del cliente está enviando las cabeceras correctas en la solicitud. Asegúrate de enviar las cabeceras “Access-Control-Request-Method” y “Access-Control-Request-Headers” en la solicitud previa, y la cabecera “Origin” en las solicitudes posteriores.

    5. Observa los registros del lado del servidor para identificar el error específico relacionado con CORS. El mensaje de error que has proporcionado no es muy informativo, por lo que es posible que necesites habilitar un registro más detallado para llegar al origen del problema.

    6. Si ninguna de las soluciones anteriores funciona, puedes intentar usar un servidor proxy para enviar tus solicitudes a la aplicación SpringBoot. De esta manera, puedes evitar lidiar con problemas de CORS por completo. Puedes utilizar herramientas como nginx o Apache HTTP Server para configurar un proxy inverso.

Comments are closed.