yuqi个人站点网站源码分享,个人网站源码下载

这篇文章给大家聊聊关于yuqi个人站点网站源码分享,以及个人网站源码下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

Spring在因Netflix开源流产事件后,在不断的更换Netflix相关的组件,比如:Eureka、Zuul、Feign、Ribbon等,Zuul的替代产品就是SpringCloudGateway,这是Spring团队研发的网关组件,可以实现限流、安全认证、支持长连接等新特性。

SpringCloudGateway

SpringCloudGateway是SpringCloud的全新子项目,该项目基于Spring5.x、SpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。

概念解释:

Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。Predicate(谓语、断言):路由转发的判断条件,目前SpringCloudGateway支持多种方式,常见如:Path、Query、Method、Header等。Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

SpringCloudGateWay工作流程如下所示

spring-cloud-gateway-work.png

客户端向SpringCloudGateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。此处理程序运行时通过特定于请求的筛选链发送请求。过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前或之后执行逻辑。执行所有“预”过滤逻辑,然后发出代理请求。在发出代理请求后,将执行“post”过滤器逻辑。

开始使用

SpringCloudGateway目前有两种方式进行配置:

application.yml配置文件方式通过@Bean注解RouteLocator方法返回值

在本章会侧重针对配置文件方式进行讲解,当然RouteLocator方式也会简单的告诉大家的使用方式。

添加依赖

添加SpringCloudGateway相关依赖,pom.xml如下所示:

//…省略部分内容\n<properties>\n<java.version>1.8</java.version>\n<spring-cloud.version>Greenwich.SR1</spring-cloud.version>\n</properties>\n<dependencies>\n<!–SpringCloudGateway–>\n<dependency>\n<groupId>org.springframework.cloud</groupId>\n<artifactId>spring-cloud-starter-gateway</artifactId>\n</dependency>\n<dependency>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter-test</artifactId>\n<scope>test</scope>\n</dependency>\n</dependencies>\n<dependencyManagement>\n<dependencies>\n<dependency>\n<groupId>org.springframework.cloud</groupId>\n<artifactId>spring-cloud-dependencies</artifactId>\n<version>${spring-cloud.version}</version>\n<type>pom</type>\n<scope>import</scope>\n</dependency>\n</dependencies>\n</dependencyManagement>\n//…省略部分内容\n

SpringCloudGatewayPredicates

在我们开始本章内容之前我们要来先了解下SpringCloudGateway内部提供的所有谓语、断言,这样我们才能目标性的进行学习,我整理出来了一个脑图,如下所示:

SpringCloud-Gateway-Predicates.png

每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。

Path方式匹配转发

通过Path转发示例,我们讲解下上面的两种配置,分别是application.yml以及RouteLocator。

配置文件匹配地址转发

我们在application.yml配置文件内添加对应的路由配置,如下所示:

spring:

application:

name:spring-cloud-gateway-sample

cloud:

gateway:

routes:

-id:blog

uri:http://blog.yuqiyu.com

predicates:

端口号

server:

port:9090

先来解释下route的组成部分:

id:路由的IDuri:匹配路由的转发地址predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。

在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发。

访问效果如下所示:

spring-cloud-gateway-path-predicate.png

RouteLocator匹配路径转发

在上面的配置中,如果使用RouteLocator方式该怎么进行配置呢?

如下所示:

@Bean\npublicRouteLocatorrouteLocator(RouteLocatorBuilderbuilder){\nreturnbuilder.routes()\n.route(“blog”,r->\nr.path(“/api-boot-datasource-switch.html”).uri(“http://blog.yuqiyu.com”))\n.build();\n}\n

Before方式匹配转发

当部署有访问时间限制的接口时,我们可以通过BeforePredicate来完成某一个时间点之前允许访问,过时后则不允许转发请求到具体的服务,配置如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Before=2019-05-01T00:00:00+08:00[Asia/Shanghai]\n

在上面配置中,我们允许2019-05-01日凌晨之前通过路由转发到http://blog.yuqiyu.com,通过查看org.springframework.cloud.gateway.handler.predicate.BeforeRoutePredicateFactory源码我们发现,SpringCloudGateway的Before断言采用的ZonedDateTime进行匹配时间,这里要注意存在时区的问题,需要配置[Asia/Shanghai]作为中国时区。

After方式匹配转发

AfterPredicate与Before配置使用一致,匹配某一个时间点之后允许路由转发,如下所示配置:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-After=2019-04-29T00:00:00+08:00[Asia/Shanghai]\n

在上面配置中允许2019-04-29凌晨之后进行转发到http://blog.yuqiyu.com。

Between方式匹配转发

那如果是一个时间段内允许请求转发,通过Before、After组合配置也可以完成,不过SpringCloudGateway还是提供了Between方式,如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Between=2019-04-29T00:00:00+08:00[Asia/Shanghai],2019-05-01T00:00:00+08:00[Asia/Shanghai]\n

在上面配置中,允许在2019-04-29日凌晨后&2019-05-01凌晨之前请求转发到http://blog.yuqiyu.com。

Cookie方式匹配转发

SpringCloudGateway还提供了根据Cookie值的方式匹配转发请求,如果请求中所携带的Cookie值与配置的Predicate匹配,那么就可以被允许转发到指定地址,如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Cookie=hengboy,yuqiyu\n

在上面配置中,如果客户端发送请求时携带了”hengboy=yuqiyu”的Cookie信息,则允许请求转发。

测试Cookie方式转发:

curlhttp://localhost:9090–cookie”hengboy=yuqiyu”\n

通过上面方式我们是可以成功转发请求的,如果我们修改Cookie的值,就会导致无法转发,出现404。

Header方式匹配转发

SpringCloudGateway可以根据发送请求的Header信息进行匹配转发,加入我们可以根据X-Request-Id的值进行匹配,如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Header=X-Request-Id,\\d+\n

在上面配置中,如果X-Request-Id的值为数字,那么就可以转发到http://blog.yuqiyu.com,我们通过如下方式进行测试:

curlhttp://localhost:9090-H”X-Request-Id:123456″\n

如果头信息为X-Request-Id:abc时,就会转发失败,出现404。

Host方式匹配转发

SpringCloudGateway可以根据Host主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com域名进行访问,那么配置如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Host=**.yuqiyu.com\n

测试如下所示:

1.curlhttp://localhost:9090-H”Host:yuqiyu.com”//匹配\n2.curlhttp://localhost:9090-H”Host:api.yuqiyu.com”//匹配\n3.curlhttp://localhost:9090-H”Host:admin.yuqiyu.com”//匹配\n3.curlhttp://localhost:9090-H”Host:hengboy.com”//不匹配\n

请求方式方式匹配转发

Rest请求风格的接口内往往会存在多种请求方式的接口,如果我们的接口只允许POST请求访问,那么配置如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Method=POST\n

发送GET请求测试:

~curlhttp://localhost:9090\n{“timestamp”:”2019-04-29T06:27:41.121+0000″,”path”:”/”,”status”:404,”error”:”NotFound”,”message”:null}\n

我们的请求并未被SpringCloudGateway进行转发,那么我们再来通过POST请求进行测试:

curl-XPOSThttp://localhost:9090\n

是可以被转发到目标地址uri的,不过我的这个博客是OSS部署的,阿里云限制了POST访问,尽管如此我们也证明了可以转发。

请求参数方式匹配转发

SpringCloudGateWay还支持根据指定的参数进行匹配,Query方式的Predicate也有两种方式匹配情况,如下所示:

请求中存在xxx参数

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Query=xxx\n

我们通过curlhttp://localhost:9090\\?xxx\\=123是可以被成功转发的,只要参数存在xxx就会被成功转发,否则出现404转发失败。请求中存在xxx参数且值为zzz

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Query=xxx,zzz\n

根据上面配置,我们限定了参数xxx必须为zzz时才会被成功转发,否则同样会出现404抓发失败。

请求路径方式匹配转发

SpringCloudGateway提供了请求路径变量方式匹配转发,如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Path=/article/{articleId}\n

在上面配置中{articleId}是一个路径变量,可以是任意值,匹配/article/1、/article/abc等,测试如下所示:

~curlhttp://localhost:9090/article/1//匹配\n~curlhttp://localhost:9090/article/abc//匹配\n~curlhttp://localhost:9090/article/1/1//不匹配\n

请求IP方式匹配转发

SpringCloudGateway可以限制允许访问接口的客户端IP地址,配置后只对指定IP地址的客户端进行请求转发,配置如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-RemoteAddr=192.168.1.56/24\n

在上面我们配置了192.168.1.56/24,其中192.168.1.56是客户端的IP地址,而24则是子网掩码。

组合示例

相同的Predicate也可以配置多个,请求的转发是必须满足所有的Predicate后才可以进行路由转发,组合使用示例如下所示:

spring:\ncloud:\ngateway:\nroutes:\n-id:blog\nuri:http://blog.yuqiyu.com\npredicates:\n-Query=author,hengboy\n-Query=yuqiyu\n-Method=GET\n-Cookie=hengboy,yuqiyu\n-Header=X-Request-Id,\\d+\n-RemoteAddr=192.168.1.56/24\n

总结

本章节讲解了SpringCloudGateway的相关谓词、断言基本使用方式,GateWay内部提供了很多种灵活的路由转发规则,在同一个路由内存在多个Predicate时,同时满足规则后请求才会被路由转发。

源码位置

Gitee:https://gitee.com/hengboy/spring-cloud-chapter/tree/master/SpringCloud/spring-cloud-gateway

yuqi个人站点网站源码分享的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于个人网站源码下载、yuqi个人站点网站源码分享的信息别忘了在本站进行查找哦。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平