返回顶部
首页 > 资讯 > 后端开发 > Python >SpringCloud gateway跨域配置的操作
  • 122
分享到

SpringCloud gateway跨域配置的操作

2024-04-02 19:04:59 122人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

gateway跨域配置 gateway允许跨域的配置和zuul的不一样,记录一下。 版本 <parent> <groupId>org.s

gateway跨域配置

gateway允许跨域的配置和zuul的不一样,记录一下。

版本


 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties;
import org.springframework.cloud.gateway.route.RouteDefinitionLocator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.Http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.httpstatus;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.codec.support.DefaultServerCodecConfigurer;
import org.springframework.http.server.Reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.WEB.cors.reactive.CorsUtils;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
 

@Configuration
public class CorsConfig {
    private static final String MAX_AGE = "18000L";
 
    @Bean
    public WebFilter corsFilter() {
        return (ServerWebExchange ctx, WebFilterChain chain) -> {
            ServerHttpRequest request = ctx.getRequest();
            if (CorsUtils.isCorsRequest(request)) {
                HttpHeaders requestHeaders = request.getHeaders();
                ServerHttpResponse response = ctx.getResponse();
                HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
                HttpHeaders headers = response.getHeaders();
                headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
                headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders
                        .getAccessControlRequestHeaders());
                if(requestMethod != null){
                    headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
                }
                headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
                headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
                headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
                if (request.getMethod() == HttpMethod.OPTIONS) {
                    response.setStatusCode(HttpStatus.OK);
                    return Mono.empty();
                }
 
            }
            return chain.filter(ctx);
        };
    }
 
    @Bean
    public ServerCodecConfigurer serverCodecConfigurer() {
        return new DefaultServerCodecConfigurer();
    }
 
    
    @Bean
    public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,
                                                                        DiscoveryLocatorProperties properties) {
        return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
    }
}

gateway解决前端跨域问题

后端分离普遍都会遇到跨域问题,项目内用到了网关模块,所以我们可以在网关中解决。

解决

增加以下两个类既可


package com.him.gateway.config;
import com.him.gateway.filter.CorsResponseHeaderFilter;
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 CorsConfig {
    @Bean
    public CorsResponseHeaderFilter corsResponseHeaderFilter() {
        return new CorsResponseHeaderFilter();
    }
    @Bean
    public CorsWebFilter corsWebFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.setMaxAge(600L);
        source.reGISterCorsConfiguration("
public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
    @Override
    public int getOrder() {
        // 指定此过滤器位于NettyWriteResponseFilter之后
        // 即待处理完响应体后接着处理响应头
        return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
    }
    @Override
    @SuppressWarnings("serial")
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).then(Mono.defer(() -> {
            exchange.getResponse().getHeaders().entrySet().stream()
                    .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))
                    .filter(kv -> (kv.geTKEy().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)
                            || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)))
                    .forEach(kv ->
                    {
                        kv.setValue(new ArrayList<String>() {{
                            add(kv.getValue().get(0));
                        }});
                    });
            return chain.filter(exchange);
        }));
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringCloud gateway跨域配置的操作

本文链接: https://lsjlt.com/news/130623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringCloud gateway跨域配置的操作
    gateway跨域配置 gateway允许跨域的配置和zuul的不一样,记录一下。 版本 <parent> <groupId>org.s...
    99+
    2024-04-02
  • SpringCloud gateway跨域配置的操作方式
    这篇文章主要介绍“SpringCloud gateway跨域配置的操作方式”,在日常操作中,相信很多人在SpringCloud gateway跨域配置的操作方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-20
  • springcloud gateway设置context-path的操作
    今天说一下遇到的问题,关于 springcloud gateway 设置 context-path 的问题。 1.使用场景 由于没有申请二级域名,网关使用的地址是 xxx.com/g...
    99+
    2024-04-02
  • spring cloud gateway跨域全局CORS配置方式
    在Spring 5 Webflux中,配置CORS,可以通过自定义WebFilter实现: 注:此种写法需真实跨域访问,监控header中才会带相应属性。 代码实现方式 impo...
    99+
    2024-04-02
  • SpringCloud GateWay网关怎么配置
    本文小编为大家详细介绍“SpringCloud GateWay网关怎么配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud GateWay网关怎么配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-30
  • SpringCloud之SpringCloud gateway网关路由怎么配置
    本篇内容介绍了“SpringCloud之SpringCloud gateway网关路由怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2023-07-05
  • SpringCloud微服务中跨域配置的方法详解
    跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对 javascript 施加的安全限制。 同源策略,指的是协议,域名,端口都要相同,其中有一个不同都...
    99+
    2023-02-03
    SpringCloud微服务中跨域配置 SpringCloud跨域配置
  • SpringCloud Gateway动态路由怎么配置
    这篇“SpringCloud Gateway动态路由怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spri...
    99+
    2023-07-05
  • springboot跨域配置类及跨域请求配置
    下面通过代码看下springboot 跨域配置类,代码如下所示: ackage org.fh.config; import java.io.IOException; import j...
    99+
    2024-04-02
  • 网关GateWay的使用详解、路由、过滤器、跨域配置
    网关GateWay的使用详解、路由、过滤器、跨域配置 一、网关的基本概念 SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是: 反向代理(请求的转发)路由和负载均...
    99+
    2023-09-07
    gateway java spring cloud 分布式 服务器
  • Springcloud Gateway相关配置方法是什么
    这篇“Springcloud Gateway相关配置方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spr...
    99+
    2023-07-05
  • nginx跨域配置
    nginx跨域配置 Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAcc...
    99+
    2023-09-01
    nginx 服务器 运维
  • 解决springcloud 配置gateway 出现错误的问题
    降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,很奇怪。 也发现gateway版本从2.2.6降到2.2.3了 大坑:...
    99+
    2024-04-02
  • SpringCloud Gateway 路由配置定位原理分析
    环境:springcloud Hoxton.SR11 本节主要了解系统中的谓词与配置的路由信息是如何进行初始化关联生成路由对象的。每个谓词工厂中的Config对象又是如何被解析配置的...
    99+
    2024-04-02
  • 解决SpringCloud Gateway配置自定义路由404的坑
    目录问题背景问题现象解决过程1 检查网关配置2 跟源码,查找可能的原因3 异常原因分析解决方法心得问题背景 将原有项目中的websocket模块迁移到基于SpringCloud Al...
    99+
    2024-04-02
  • 1 Nginx跨域配置
    跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方SDK时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因    产生跨域问题...
    99+
    2023-09-05
    java 开发语言
  • SpringCloud Gateway 路由配置定位原理是什么
    这篇文章主要介绍“SpringCloud Gateway 路由配置定位原理是什么”,在日常操作中,相信很多人在SpringCloud Gateway 路由配置定位原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-20
  • SpringCloud Gateway中怎么配置fastjson序列化验证
    本篇内容主要讲解“SpringCloud Gateway中怎么配置fastjson序列化验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud Gateway中怎么配置fast...
    99+
    2023-06-05
  • 从0到1学SpringCloud之SpringCloud gateway网关路由配置示例详解
    目录一、前言二、代码演示1、配置文件2、pom依赖 3、创建微服务三、请求测试1、微服务请求转发2、第三方请求转发一、前言 微服务中经常用到gateway作为网关,它有什么...
    99+
    2023-05-14
    SpringCloud gateway网关路由 SpringCloud gateway网关路由配置 SpringCloud gateway
  • vueproxyTable的跨域中pathRewrite配置方式
    目录vue浏览器跨域问题和vue proxyTable跨域中pathRewrite配置vue浏览器跨域问题为什么会跨域什么是同源策略解决办法pathRewrite代理配置proxy下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作