以前zuul 網關介紹。他有過濾器週期是四種,也是四種類型的過濾器。而gateway 只有倆種過濾器:「pre」 和 「post」。java
這倆種過濾器是否是很熟悉。其實和zuul的過濾器很像。react
可是gateway 過濾器又能夠分爲倆種。GatewayFilter 與 GlobalFilter。web
還有內置的過濾器斷言機制。在上一篇已經作過介紹。本篇就不在介紹。spring
一樣全局過濾器也在上一篇列舉了全局過濾器的一種寫法,有興趣的同窗能夠回過頭看一下。安全
建立ServerGatewayFilter 類curl
package com.xian.cloud.filter; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.core.Ordered; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; /** * <Description> * * @author xianliru@100tal.com * @version 1.0 * @createDate 2019/11/07 17:34 */ @Slf4j public class ServerGatewayFilter implements GatewayFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("ServerGatewayFilter filter "); return chain.filter( exchange ); } @Override public int getOrder() { return 0; } }
建立 GatewayRoutesConfigurationide
package com.xian.cloud.filter; import lombok.extern.slf4j.Slf4j; 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; /** * <Description> * * @author xianliru@100tal.com * @version 1.0 * @createDate 2019/11/08 09:45 */ @Configuration @Slf4j public class GatewayRoutesConfiguration { /** * java 配置 server 服務路由 * @param builder * @return */ @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { log.info("ServerGatewayFilter filtet........"); return builder.routes() .route(r -> r.path("/server/**") .filters( f -> f.stripPrefix(1) .filters(new ServerGatewayFilter()) ) .uri("lb://cloud-discovery-server") ) .build(); } }
啓動服務
gateway 服務日誌打印微服務
[2019-11-08 11:07:17.357] [] [] [] [] [INFO ] com.xian.cloud.filter.GatewayRoutesConfiguration - ServerGatewayFilter filtet........
命令行 curl http://localhost:9000/server/server/hello?name=tom 返回 hello tom age = 20post
日誌打印ui
[2019-11-08 11:08:09.966] [] [] [] [] [INFO ] com.xian.cloud.filter.AuthorizeFilter - AuthorizeFilter token 全局過濾器 token:null,uid:null [2019-11-08 11:08:09.970] [] [] [] [] [INFO ] com.xian.cloud.filter.ServerGatewayFilter - ServerGatewayFilter filter
咱們看到日誌已經打印咱們想看到的日誌。
java配置方式與yml文件配置。java配置優先級更高。親測
gateway 的斷言和過濾器提供如此豐富的內置斷言和過濾器。讓咱們有很是豐富的組合模式,應對咱們實際開發的場景。還能夠根據具體的場景作一些特殊處理。
2.2.X版本 gateway 增長了相似於註冊中心的元數據。在gateway 配置一下元數據。帶着數據請求到下游服務。有興趣的同窗能夠去官網查看官方文檔。
如何喜歡能夠關注分享本公衆號。