spring gateway如何解决跨域问题

 更新时间:2024年04月22日 10:13:26   作者:it界的哈士奇  
这篇文章主要介绍了spring gateway如何解决跨域问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

报错截图

报错意思是请求头中没有Access-Control-Allow-Origin

报错分析

但我在网关的配置文件中早就加了跨域的配置了

尝试解决

于是我上网开始查

但是网上的代码要么方法过时报错,要么就向配置文件原因没有起作用,好在我坚持不懈的查询下,把所有有用的信息拼凑成了一个有用的配置方法

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;
import org.springframework.web.util.pattern.PathPatternParser;

@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*"); // 允许任何方法(post、get等)
        config.addAllowedOrigin("*"); // 允许任何域名使用
        config.addAllowedHeader("*"); // 允许任何头
        config.setAllowCredentials(true); //允许接受cookie

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

只要在网关微服务下创建一个配置类把这段代码加进去即可

于是

重新启动

好家伙

再次报错,不过这次不是没有该属性,而是两个!!

那既然这样

我就试试只用代码配置,而注释配置文件配置(因为开始就是配置文件配置无效)

重启走起

依然报重复错误。。。。

最终

最后通过调试发现

请求发往网关后,再次发往其他微服务,而该微服务的controller类上配置了跨域注解

这就导致了两次Access-Control-Allow-Origin被设置了

所有只要把@CrossOrigin注解去了即可

再次重启

总结

除了为啥在配置文件里配置没有生效没搞懂外,其他都能理解

同时这里也解释了一个问题,为啥要专门写一个接口api模块来专门实现微服务间的调用

从这里调用用户微服务来看,网关配置了跨域,那么其他的微服务就不能配置跨域了

那这样微服务如果直接调用就成了跨域了,而api接口模块就很好的解决了这个问题,同时也限制了服务与服务见可调用接口的数量,按需来调用,看来当初听老师话多创建一个api接口模块是有原因的啊

解决睡觉!

补充!!!

后来发现

删除其他微服务的跨域配置在vue连接里可行

但是如果在html页面直接发送axios请求后台数据

请求网关可行,但是请求完了网关,网关会进行一次页面转发

这就使得第二次请求没有Access-Control-Allow-Origin报跨域请求

如果将后台服务的跨域配置重新写上

又会出现Access-Control-Allow-Origin重复的问题。。。

好在查到了大佬的帖子,可以在配置文件找那个添加一段过滤配置

解决重复跨域问题,进行header去重

spring:
  cloud:
    gateway:
      default-filters:
        - DedupeResponseHeader=Vary Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_UNIQUE
        - DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_FIRST

原帖链接

至于帖子中写的解决cookie跨域问题,,,我试了,似乎没有效果,一样报跨域错误,于是我在配置类尝试着找相关方法,还真有!

只需要在配置类里添加以一段设置cookie允许跨域的配置(已经在上面的配置方法里补充了cookie跨域代码)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java设计模式策略模式图文示例详解

    java设计模式策略模式图文示例详解

    这篇文章主要为大家介绍了java设计模式策略模式图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    这篇文章主要介绍了关于mybatis遇到Integer类型的参数时动态sql需要注意条件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 一文详解Java拦截器与过滤器的使用

    一文详解Java拦截器与过滤器的使用

    这篇文章主要为大家详细介绍了Java中拦截器与过滤器的使用与区别,文中的示例代码讲解详细,对我们学习有一定参考价值,需要的可以参考一下
    2022-04-04
  • ssm项目改造spring boot项目完整步骤

    ssm项目改造spring boot项目完整步骤

    Spring Boot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成,下面这篇文章主要给大家介绍了关于ssm项目改造spring boot项目的相关资料,需要的朋友可以参考下
    2023-04-04
  • 看动画学算法之Java实现doublyLinkedList

    看动画学算法之Java实现doublyLinkedList

    这篇文章主要介绍Java实现doublyLinkedList,LinkedList:doublyLinkedList相对比较复杂,今天就来简单学习一下doublyLinkedList的基本操作和概,感兴趣的小伙伴可以参考下面具体文章内容
    2021-10-10
  • Springboot参数校验之分组校验、嵌套校验的实现

    Springboot参数校验之分组校验、嵌套校验的实现

    日常开发中,免不了需要对请求参数进行校验,诸如判空,长度,正则,集合等,复杂一点的请求参数可能会包含嵌套,分组校验,本文就详细的介绍一下,感兴趣的可以了解一下
    2023-08-08
  • springboot项目中jacoco服务端部署使用

    springboot项目中jacoco服务端部署使用

    这篇文章主要为大家介绍了springboot项目中jacoco服务端部署使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java Pattern和Matcher字符匹配方式

    Java Pattern和Matcher字符匹配方式

    这篇文章主要介绍了Java Pattern和Matcher字符匹配方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 一篇文章带你认识Java8接口的默认方法

    一篇文章带你认识Java8接口的默认方法

    这篇文章主要给大家介绍了如何通过一篇文章带你认识Java8接口的默认方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Java判断对象是否为空的四种方法小结

    Java判断对象是否为空的四种方法小结

    这篇文章主要介绍了Java判断对象是否为空的四种方法,判断对象是否为空有多种方法,包括使用==或!=运算符直接比较对象与null,使用Objects.isNull()方法,以及用instanceof运算符或Optional类进行更安全的空值处理,需要的朋友可以参考下
    2024-10-10

最新评论