Springcloud GateWay網(wǎng)關(guān)配置過(guò)程圖解
一般為了不暴露自己的端口信息等,會(huì)選擇架構(gòu)一個(gè)網(wǎng)關(guān)在前面進(jìn)行阻擋,起到保護(hù)的作用。附上一張工作示列圖。
1.配置網(wǎng)關(guān)9527
gateway作為網(wǎng)關(guān)需要和其他的應(yīng)用一樣需要注冊(cè)進(jìn)eureka中進(jìn)行管理,先創(chuàng)建應(yīng)用gateway9527
pom文件,關(guān)鍵是gateway依賴
<dependencies> <dependency> <groupId>com.bai</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency> <!--gateway--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--eureka client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--熱部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
yml文件配置
server: port: 9527 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true # 開(kāi)啟從注冊(cè)中心動(dòng)態(tài)創(chuàng)建路由的功能,利用微服務(wù)名稱進(jìn)行路由 routes: - id: payment_route # 路由的id,沒(méi)有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名 #匹配后提供服務(wù)的路由地址 #uri: http://localhost:8001 uri: lb://cloud-payment-service predicates: - Path=/payment/get/** # 斷言,路徑相匹配的進(jìn)行路由 - id: payment_route2 #uri: http://localhost:8001 uri: lb://cloud-payment-service predicates: - Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由 eureka: instance: hostname: cloud-gateway-service client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://eureka7001.com:7001/eureka/
主啟動(dòng)類正常配置
@SpringBootApplication @EnableEurekaClient public class GateWay9527 { public static void main(String[] args) { SpringApplication.run(GateWay9527.class,args); } }
2.配置路由兩種方式
1)yml文件格式(推薦)
spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true # 開(kāi)啟從注冊(cè)中心動(dòng)態(tài)創(chuàng)建路由的功能,利用微服務(wù)名稱進(jìn)行路由 routes: - id: payment_route # 路由的id,沒(méi)有規(guī)定規(guī)則但要求唯一,建議配合服務(wù)名 #匹配后提供服務(wù)的路由地址 #uri: http://localhost:8001 uri: lb://cloud-payment-service predicates: - Path=/payment/get/** # 斷言,路徑相匹配的進(jìn)行路由 - id: payment_route2 #uri: http://localhost:8001 uri: lb://cloud-payment-service predicates: - Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由 - After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai] - Cookie=username,bai #帶Cookie,并且username的值為bai # - Header=X-Request-Id,\d+ #請(qǐng)求頭要有 X-Request-Id屬性并且值為整數(shù)的正則表達(dá)式
2)通過(guò)config配置類實(shí)現(xiàn)
@Configuration public class RouteConfig { @Bean public RouteLocator customerRoute(RouteLocatorBuilder builder){ RouteLocatorBuilder.Builder routes = builder.routes(); routes.route("payment_route1", r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build(); return routes.build(); } @Bean public RouteLocator bokeRoute(RouteLocatorBuilder builder){ RouteLocatorBuilder.Builder routes = builder.routes(); routes.route("payment_route2",r->r.path("/boke").uri("http://www.cnblogs.com/lin530/")).build(); return routes.build(); } }
3.斷言(Predicate)
相當(dāng)于多種限制,只有通過(guò)驗(yàn)證才能夠訪問(wèn)到對(duì)應(yīng)的方法
- id: payment_route2 #uri: http://localhost:8001 uri: lb://cloud-payment-service predicates: - Path=/payment/sp/** #斷言,路徑相匹配的進(jìn)行路由 - After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai] - Cookie=username,bai #帶Cookie,并且username的值為bai # - Header=X-Request-Id,\d+ #請(qǐng)求頭要有 X-Request-Id屬性并且值為整數(shù)的正則表達(dá)式
不同的方法可以配置不同的斷言,此處的斷言需要滿足路徑對(duì),after時(shí)間后,cookie帶上正確的用戶名才可以訪問(wèn)到,用cmd測(cè)試
其他還有很多斷言,請(qǐng)對(duì)照文檔自行研究
4)過(guò)濾(filter)
對(duì)訪問(wèn)加上限制,通過(guò)驗(yàn)證才可以訪問(wèn)
新建過(guò)濾配置類
@Component @Slf4j public class GatewayGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("***time is :"+new Date()); String uname = exchange.getRequest().getQueryParams().getFirst("uname"); if(uname==null){ log.info("沒(méi)有用戶名,出現(xiàn)錯(cuò)誤:o(╥﹏╥)o"); exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } /* 設(shè)置過(guò)濾器優(yōu)先級(jí),越小優(yōu)先級(jí)越大 */ @Override public int getOrder() { return 0; } }
訪問(wèn)方式帶上參數(shù),
本篇所有代碼均在GitHub:
https://github.com/MaTsukun/springcloud2020
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java Socket一對(duì)多通信實(shí)現(xiàn)之并發(fā)處理方式
這篇文章主要介紹了Java Socket一對(duì)多通信實(shí)現(xiàn)之并發(fā)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08JAVA發(fā)送HTTP請(qǐng)求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實(shí)例代碼
這篇文章主要介紹了JAVA發(fā)送HTTP請(qǐng)求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實(shí)例代碼,需要的朋友可以參考下2014-02-02解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決Intellij IDEA 使用Spring-boot-devTools無(wú)效的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10一文搞懂接口參數(shù)簽名與驗(yàn)簽(附含java python php版)
這篇文章主要為大家介紹了java python php不同版的接口參數(shù)簽名與驗(yàn)簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Spring的BeanFactoryPostProcessor接口示例代碼詳解
這篇文章主要介紹了Spring的BeanFactoryPostProcessor接口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Springboot如何利用攔截器攔截請(qǐng)求信息收集到日志詳解
一些系統(tǒng)經(jīng)常需要關(guān)注用戶請(qǐng)求的具體信息,如用戶信息、請(qǐng)求參數(shù)、響應(yīng)結(jié)果等等,在SpringBoot應(yīng)用中可通過(guò)攔截器的方式統(tǒng)一處理,下面這篇文章主要給大家介紹了關(guān)于Springboot如何利用攔截器攔截請(qǐng)求信息收集到日志的相關(guān)資料,需要的朋友可以參考下2021-08-08Spring Boot 使用WebAsyncTask異步返回結(jié)果
這篇文章主要介紹了Spring Boot 使用WebAsyncTask異步返回結(jié)果的相關(guān)資料,需要的朋友可以參考下2018-02-02