Comparta tres soluciones a problemas entre dominios en el backend

1. Introducción al dominio cruzado

Intercambio de recursos de origen cruzado ( CORS, Cross-Origin Resource Sharing , intercambio de recursos de origen cruzado, o popularmente traducido como intercambio de recursos de dominio cruzado) es un mecanismo basado en encabezados HTTP, que permite que el servidor marque un origen diferente al suyo (dominio , protocolo o puerto), lo que hace que el navegador permita el acceso a estos orígenes para cargar sus propios recursos. El intercambio de recursos de origen cruzado también verifica que el servidor permita que la solicitud real se envíe a través de un mecanismo por el cual el navegador inicia una solicitud de "verificación previa" a un recurso de origen cruzado alojado en el servidor. En la verificación previa, los encabezados enviados por el navegador indican el método HTTP y los encabezados que se utilizarán en la solicitud real.

2. Razones para cruzar dominios

El motivo del problema entre dominios es causado por la "política del mismo origen" del navegador. ¿Qué es la política del mismo origen? El navegador estipula que el protocolo de red 1, el nombre de dominio del host 2 y el puerto 3 de mi página actual y la página solicitada deben ser exactamente iguales. Como se muestra abajo:

Esto lo establece principalmente el navegador para garantizar las necesidades básicas de seguridad de los usuarios que navegan por Internet.

1. Para evitar que páginas web maliciosas obtengan datos locales de otros sitios web.

2. Para evitar que los sitios web maliciosos obtengan datos cuando iframe de otros sitios web.

3. Para evitar que los sitios web maliciosos tengan derecho a acceder a otros sitios web en su propio sitio web, para no evitar iniciar sesión y obtener datos a través de cookies.

3. Soluciones multidominio

Hay muchas soluciones de dominio cruzado, tanto front-end como back-end. Aquí presento principalmente las tres soluciones que conozco y las muestro con código.

1. Anote @CrossOrign en el método del código de acceso de back-end. Esta anotación es una anotación en spring-web Solo necesitamos agregar anotaciones en el método para resolver el problema CORS. Por ejemplo:

/**
     * 获取用户信息
     * 
     * @return 用户信息
     */
    @GetMapping("getInfo")
    @CrossOrigin
    public AjaxResult getInfo()
    {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        // 角色集合
        Set<String> roles = permissionService.getRolePermission(user);
        // 权限集合
        Set<String> permissions = permissionService.getMenuPermission(user);
        AjaxResult ajax = AjaxResult.success();
        ajax.put("user", user);
        ajax.put("roles", roles);
        ajax.put("permissions", permissions);
        return ajax;
    }

Sin embargo, hay muchos métodos accedidos en el backend, no podemos agregar esta anotación a cada método, el código es redundante. Entonces hay un segundo método, podemos agregar un filtro para resolver el problema de CORS, el código es el siguiente:


@Configuration
public class CORSFilter {
    @Bean
    public CorsFilter corsFilter(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }
}

Hay otra solución, podemos resolver el problema de dominio cruzado implementando la interfaz y reescribiendo el método, el código es el siguiente:

@Configuration
public class CORSConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET","POST","PUT","HEAD")
                .allowCredentials(true)
                .allowedHeaders("*")
                .maxAge(3600);
    }
}

A través de estos tres métodos, podemos resolver el problema de dominio cruzado de CORS.

Supongo que te gusta

Origin blog.csdn.net/Lee_92/article/details/129230088
Recomendado
Clasificación