spring cloud在Zuul网关 如何解决跨域问题

本文介绍了在Spring Cloud Zuul中处理跨域问题的三种策略:通过编写配置类继承ZuulFilter实现过滤器,允许所有源;创建独立的配置类使用CorsFilter设置具体允许的源;以及在Zuul启动类中直接定义CorsFilter Bean,允许所有源并设置相关配置。这些方法有助于确保前端和后端API之间的跨域通信正常。
摘要由CSDN通过智能技术生成
spring cloud在Zuul网关 如何解决跨域问题
  1. 解决方法一:编写配置类继承ZuulFilter

    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
    
    /**
     * @author : 
     * @program : com.mooc.jiangzh.springcloud.filters.pre
     * @description : 解决跨域问题
     **/
    @Component
    public class CorsFilter extends ZuulFilter {
    
        public String filterType() {
            return "pre";
        }
    
        public int filterOrder() {
            return 0;
        }
    
        public boolean shouldFilter() {
            return true;
        }
    
        public Object run() {
            RequestContext ctx = RequestContext.getCurrentContext();
            // 跨域
            HttpServletResponse response = ctx.getResponse();
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,DELETE,PUT");
            response.setHeader("Access-Control-Allow-Headers","DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization");
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
    //    response.setContentType("text/html;charset=UTF-8");
    
        /*
          跨域资源共享
            - 这是HTTP协议规定的安全策略
            - 配置资源共享的方式和目标方
    
            前端: node+vue -> admin.meetingfilm.com
            后端: springboot -> backend.meetingfilm.com
    
            -> 示例
            缺陷:如果出现跨域策略不足的情况,需要修改代码,重新部署
            -> Nginx
         */
    
            return null;
        }
    
    }
    
    zuul:
    #需要忽略的头部信息,不在传播到其他服务
      sensitive-headers: Access-Control-Allow-Origin
      ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken
    
  2. 解决方法二:编写配置类

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    @Configuration
    public class CorsConfig {
    
        public CorsConfig() {
        }
    
        @Bean
        public CorsFilter corsFilter() {
            // 1. 添加cors配置信息
            CorsConfiguration config = new CorsConfiguration();
            config.addAllowedOrigin("http://localhost:8080");
    //        config.addAllowedOrigin("http://shop.z.mukewang.com:8080");
    //        config.addAllowedOrigin("http://center.z.mukewang.com:8080");
    //        config.addAllowedOrigin("http://shop.z.mukewang.com");
    //        config.addAllowedOrigin("http://center.z.mukewang.com");
    //        config.addAllowedOrigin("*");
    
            // 设置是否发送cookie信息
            config.setAllowCredentials(true);
    
            // 设置允许请求的方式
            config.addAllowedMethod("*");
    
            // 设置允许的header
            config.addAllowedHeader("*");
    
            // 2. 为url添加映射路径
            UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
            corsSource.registerCorsConfiguration("/**", config);
    
            // 3. 返回重新定义好的corsSource
            return new CorsFilter(corsSource);
        }
    
    }
    

  1. 解决方法三:在Zuul启动类下编写bean

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    @EnableZuulProxy
    @SpringBootApplication
    public class BackendApigwZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BackendApigwZuulApplication.class, args);
        }
    
        @Bean
        public CorsFilter corsFilter() {
            final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            final CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true); // 允许cookies跨域
            config.addAllowedOrigin("*");// 允许向该服务器提交请求的URI,*表示全部允许。
            config.addAllowedHeader("*");// 允许访问的头信息,*表示全部
            config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
            config.addAllowedMethod("*");// 允许提交请求的方法,*表示全部允许,也可以单独设置GET、PUT等
            source.registerCorsConfiguration("/**", config);
            return new CorsFilter(source);
        }
    
    }
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值