springcloud3 GateWay通过编码方式实现
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud3 GateWay通过编码方式实现相关的知识,希望对你有一定的参考价值。
一 Gateway通过编码方式实现
1.1 Gateway编码方式
1.编写一个注册类
package com.ljf.mscloud.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
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;
/**
* @auther zzyy
* @create 2020-02-21 11:42
*/
@Configuration
public class GateWayConfig
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder)
/**
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("path_haha",
r -> r.path("/batchSearch")
.uri("https://www.qcc.com/web/project")).build();//https://www.qcc.com/web/project/batchSearch
return routes.build();
/********************************** 百度网站 ***********************/
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
/**情况1
routes.route("path_route_rg",r->r.path("/lady").uri("https://news.baidu.com/lady")).
route("path_route_rg2",r->r.path("/guonei").uri("https://news.baidu.com/guonei"));
**/
/**
* 情况2
routes.route("path_route_rg",r->r.path("/lady").uri("https://news.baidu.com")).
route("path_route_rg2",r->r.path("/guonei").uri("https://news.baidu.com"));
*/
/** 情况3
routes.route("path_route_rg",r->r.path("/**").uri("https://news.baidu.com"));
**/
//return routes.build();
// routes.route("path_haha", r -> r.path("/batchSearch").uri("https://www.qcc.com/web/project/batchSearch")); //https://www.qcc.com/web/project/batchSearch
// routes.route("path_haha", r -> r.path("/batchSearch").uri("https://www.qcc.com/web/project")); //https://www.qcc.com/web/project/batchSearch
routes.route("path_haha", r -> r.path("/web/project/batchSearch").uri("https://www.qcc.com")); //https://www.qcc.com/web/project/batchSearch
// routes.route("path_haha", r -> r.path("/web/**").uri("https://www.qcc.com/web/project/batchSearch"));
// routes.route("path_haha2", r -> r.path("/nav/**").uri("https://blog.csdn.net"));// https://blog.csdn.net/nav/web
// routes.route("path_haha2", r -> r.path("/web").uri("https://blog.csdn.net/nav/"));
// routes.route("path_haha2", r -> r.path("/nav/web").uri("https://blog.csdn.net"));
// routes.route("path_haha2", r -> r.path("/nav/web").uri("https://blog.csdn.net/nav/web"));
// return routes.build();
return routes.build();
@Bean
public CorsWebFilter corsFilter()
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
1.2 操作方式
1.启动eureka9001,eureka9002
2.服务提供者 9003,9004,
3.网关 9007
1.3 结论
后面的测试案例中,有的配置能访问,有的不能访问,总结
1.断言:配置成域名第一级路径加通配符 /** ,进行模糊匹配,肯定正确
2.如果域名后面有多层级路径,把域名后面的所有路径当成一个整体,配置到断言,uri配置成 域名的根级别。
routes.route("path_route_rg",r->r.path("/lady").uri("https://news.baidu.com")).
route("path_route_rg2",r->r.path("/guonei").uri("https://news.baidu.com"));
routes.route("path_haha",r.path("/web/project/batchSearch").uri("https://www.qcc.com")); //https://www.qcc.com/web/project/batchSearch
3.其他配置可能存在问题
二 Gateway案例测试
2.1 访问百度新闻
2.2.1 访问百度新闻1
最后一级路径做断言,uri为完整转发地址。
1.代码
routes.route("path_route_rg",r->r.path("/lady").uri("https://news.baidu.com/lady")).
route("path_route_rg2",r->r.path("/guonei").uri("https://news.baidu.com/guonei"));
2.代理后:http://localhost:9007/guonei
2.2.2 访问百度新闻2
最后一级路径做断言,uri为根域名
1.代码
routes.route("path_route_rg",r->r.path("/lady").uri("https://news.baidu.com")).
route("path_route_rg2",r->r.path("/guonei").uri("https://news.baidu.com"));
2.代理后:http://localhost:9007/guonei
2.2.3 访问百度新闻3
使用模糊匹配规则做断言
1.代码
/** 情况3 **/
routes.route("path_route_rg",r->r.path("/**").uri("https://news.baidu.com"));
2.代理后:http://localhost:9007/guonei
2.2 访问企查查
2.2.1 情况1
routes.route("path_haha", r -> r.path("/batchSearch").uri("https://www.qcc.com/web/project/batchSearch")); //https://www.qcc.com/web/project/batchSearch
访问
2.2.2 情况2
1.代码
routes.route("path_haha", r -> r.path("/batchSearch").uri("https://www.qcc.com/web/project")); //https://www.qcc.com/web/project/batchSearch
访问
2.2.3 情况3
1.代码
routes.route("path_haha", r -> r.path("/web/project/batchSearch").uri("https://www.qcc.com")); //https://www.qcc.com/web/project/batchSearch
2.页面访问
2.2.4 情况4
1.代码
routes.route("path_haha", r -> r.path("/web/**").uri("https://www.qcc.com/"));
2.页面访问
2.3 访问csdn
2.3.1 情况1
1.代码
routes.route("path_haha2", r -> r.path("/nav/**").uri("https://blog.csdn.net"));// https://blog.csdn.net/nav/web
访问:
2.3.2 情况2
1.代码
routes.route("path_haha2", r -> r.path("/web").uri("https://blog.csdn.net/nav/"));
2.页面访问
2.3.3 情况3
1.代码
routes.route("path_haha2", r -> r.path("/nav/web").uri("https://blog.csdn.net"));
2.页面访问
2.3.4 情况4
1.代码
routes.route("path_haha2", r -> r.path("/nav/web").uri("https://blog.csdn.net/nav/web"));
2.页面访问
以上是关于springcloud3 GateWay通过编码方式实现的主要内容,如果未能解决你的问题,请参考以下文章
springcloud3 GateWay的断言和filter操作
如何为 AWS API Gateway 自定义授权方配置 CORS?