分布式电商项目十九:分布式微服务对网关进行跨域配置

对网关进行跨域配置

想要解决跨域问题有两个方法,一、使用Nginx反向代理,将需要请求的内容都放入同一个源中,二、添加响应头,进行跨域的放行。

我们使用第二个方法,需要在网关的模块中添加一个过滤器,进行放行请求的操作以及给响应添加请求头的操作。

内容解析
目的是添加一个 跨域的过滤器CorsWebFilter来对请求进行放行,点开CorsWebFilter的源码:
分布式电商项目十九:分布式微服务对网关进行跨域配置_第1张图片
可以看到它的构造函数里面需要添加一个CorsConfigurationSource配置类,点开这个配置类:
分布式电商项目十九:分布式微服务对网关进行跨域配置_第2张图片
这是一个接口,包里面有提供它的实现类:
分布式电商项目十九:分布式微服务对网关进行跨域配置_第3张图片
再点开它的实现类可以找到它有一个修改配置的方法:
在这里插入图片描述
创建一个CorsConfiguration,使用registerCorsConfiguration方法添加进去即可。实现代码:
新建文件mall-gateway/src/main/java/com/lastingwar/mall/gateway/config/GulimallCorsConfiguration.java,内容如下:

package com.lastingwar.mall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class MallCorsConfiguration {

    @Bean
    //需要添加的组件 跨域过滤器
    public CorsWebFilter corsWebFilter(){
        //包里面给到的实现CorsConfigurationSource接口的类
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //Cors跨域配置类,需要添加配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();

        //1、配置跨域
        corsConfiguration.addAllowedHeader("*");//允许跨域的请求头
        corsConfiguration.addAllowedMethod("*");//允许跨域的方法
        corsConfiguration.addAllowedOrigin("*");//允许跨域的请求来源
        corsConfiguration.setAllowCredentials(true);//允许携带cookie进行跨域

        //UrlBasedCorsConfigurationSource类中添加需要跨域的路径,和跨域配置
        source.registerCorsConfiguration("/**",corsConfiguration);

        return new CorsWebFilter(source);
    }
}

这样网关的过滤器就配置好了,之后需要注释掉renren-fast自己配置的跨域:
renren-fast/src/main/java/io/renren/config/CorsConfig.java

/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 *
 * https://www.renren.io
 *
 * 版权所有,侵权必究!
 */

package io.renren.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")
//            .allowedOrigins("*")
//            .allowCredentials(true)
//            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
//            .maxAge(3600);
//    }
}

重启微服务之后,再访问http://localhost:8001/#/login,即可正常使用。
分布式电商项目十九:分布式微服务对网关进行跨域配置_第4张图片

你可能感兴趣的:(分布式电商项目mall)