1. 程式人生 > >Spring Cloud系列教程 | 第七篇:使用Spring Cloud Zuul實現過濾器或攔截器功能案例

Spring Cloud系列教程 | 第七篇:使用Spring Cloud Zuul實現過濾器或攔截器功能案例

推薦 Spring Cloud 視訊:

使用Spring Cloud Zuul實現過濾器或攔截器功能案例

  Spring Cloud的API閘道器不但可以實現類似NGINX+Lua強大的路由分發,實現動靜頁面的分流,更重要可以實現對所有發往後端微服務請求的攔截。Zuul主要有四種類型的過濾器,我們可以為特定的url模式新增任意數量的過濾器。

  • “pre” 預過濾器 - 在路由分發一個請求之前呼叫。
  • “post” 後過濾器 - 在路由分發一個請求後呼叫。
  • “route” 路由過濾器 - 用於路由請求分發。
  • “error” 錯誤過濾器 - 在處理請求時發生錯誤時呼叫

在這裡插入圖片描述
上圖顯示這幾種過濾器的前後呼叫順序,第一個是pre過濾器然後是Route過濾器,最後響應是post過濾器。

下面我們開始演示這幾種過濾器的開發,Springcloud的開發三板斧就是pom.xml、application配置和元註解三種,首先pom.xml如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

下面是自己實現這四種過濾器,只要實現com.netflix.zuul.ZuulFilter介面,然後實現方法filterType,返回字串為這四種類型pre post route error。

@Override
public String filterType() {
    return "pre;//關鍵在這裡,四種類型定義
}

比如實現pre型別前處理器程式碼:

public class PreFilter extends ZuulFilter {

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();

        System.out.println(
                "Pre Filter: Request Method : " + request.getMethod() + " " +
                        "Request URL : " + request.getRequestURL().toString());

        return null;
    }

}

這裡雖然類名PreFilter,其實是可以任意取名的,在run方法中我們定義了該過濾器應該做的事情。

其他幾種也是類似這樣建立,這裡省去,可見文後的原始碼。

下面我們來執行除錯驗證,首先還是啟動Producer服務,當然也可以啟動註冊伺服器,這取決於你只使用URL路徑分發還是服務ID分發。這部分設定見上篇

執行我們的Zuul應用,然後訪問http://localhost:8080/producer/articles

控制檯輸出如下:

Pre Filter: Request Method : GET Request URL : http://localhost:8080/producer/articles
Route: Using Route Filter
Post:Using Post Filter

過濾器作用比較大,一般用來作為安全攔截,當然最好不要侵入業務,否則這裡變成一個業務服務閘道器,當然你也可以美其名曰“中臺”,其實像ESB訊息匯流排等複雜業務侵入式的中臺都是多餘的。微服務倡導智慧終端啞管道理念,啞管道就是管道必須簡單,是個啞巴,不要太智慧。

由於Zuul充當我們所有微服務的代理,我們可以使用Zuul服務來實現一些跨領域的問題,如安全性,速率限制等。一個常見的用例是將Authentication頭轉發給所有下游服務。

通常在微服務中,我們將使用OAuth服務進行身份驗證和授權。一旦客戶端通過身份驗證,OAuth服務將生成一個令牌,該令牌應包含在傳送給其他微服務的請求中,以便客戶端無需單獨為每個服務進行身份驗證。我們可以使用Zuul過濾器來實現這樣的功能。當然實際中會使用JWT令牌格式。

專家推薦

“隨著微服務架構的發展,Spring Cloud 使用得越來越廣泛。馳狼課堂http://www.chilangedu.com (QQ群:348039381) Spring Boot 快速入門,Spring Boot 與Spring Cloud 整合,docker+k8s,大型電商商城等多套免費實戰教程可以幫您真正做到快速上手,將技術點切實運用到微服務專案中。”

本文原始碼用Idea開啟:百度網盤

關注公眾號,每天精彩內容,第一時間送達!
在這裡插入圖片描述

相關推薦

Spring Cloud系列教程 | 使用Spring Cloud Zuul實現過濾器攔截功能案例

推薦 Spring Cloud 視訊: 使用Spring Cloud Zuul實現過濾器或攔截器功能案例   Spring Cloud的API閘道器不但可以實現類似NGINX+Lua強大的路由分發,實現動靜頁面的分流,更重要可以實現對所有發往後端微服務請求的攔

Spring Cloud系列教程 | Spring Cloud Config Server和Spring Cloud Bus以及Kafka和資料庫動態重新整理配置

推薦 Spring Cloud 視訊: Spring Cloud Config Server和Spring Cloud Bus以及Kafka和資料庫動態重新整理配置     Spring cloud config server如果不結合Spring cloud

Spring Cloud系列教程 | Spring Cloud Zuul作為API閘道實現請求路由轉發教程

推薦 Spring Cloud 視訊: Spring Cloud Zuul作為API閘道器實現請求路由轉發教程      當我們的架構實現前後端分離以後,前端和後端之間互動就是通過API閘道器進行,API閘道器兩個職責: 1.設計上的適配層,或稱Facade模

Spring Cloud系列教程 | Eurake的自我保護機制

Eurake的自我保護機制     從CAP定理角度看,Eureka是一個AP系統,以高可用性為主,而zookeeper則是CP,以高一致性為主,所以如果使用ZK在服務發現和註冊方面,可用服務資訊雖然很及時,但是會出現不可用情形,造成無法克服的生產事故。Eure

Spring Cloud系列教程 | Eureka心跳健康檢查機制

推薦 Spring Cloud 視訊: Eureka心跳健康檢查機制 執行階段執行健康檢查的目的是為了從Eureka伺服器登錄檔中識別並刪除不可訪問的微服務,Eureka 伺服器並不是向客戶端傳送心跳請求,而是反過來,Eureka 客戶端將心跳傳送到Eurek

Spring Boot 基礎系列教程 | 使用Java 8中LocalDate等時間日期類的問題解決

推薦 Spring Boot/Cloud 視訊: Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問題         LocalDate、LocalTime、LocalDateTime是Java 8開始提供的

跟我學SpringCloud | Spring Cloud Config 配置中心高可用和refresh

SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 1. 引言 上一篇我們聊了Sprin

spring cloud系列教程-Eureka基礎知識

通過前三篇文章學習,我們搭建好了兩個微服務工程。即:order80和payment8001這兩個服務。有了這兩個基礎的框架之後,我們將要開始往裡面新增東西了。還記得分散式架構的幾個維度嗎?我們要通過一個一個維度來講解每個知識點。如下圖:   任何一個分散式或者是微服務都會需要一個服務註冊中心。用

spring cloud系列教程-Eureka叢集版

spring cloud系列教程第六篇-Eureka叢集版 本文主要內容: 本文來源:本文由凱哥Java(kaigejava)釋出在部落格園部落格的。轉載請註明 1:Eureka執行步驟理解 2:叢集原理 3:Eureka叢集搭建 4:修改payment和order專案註冊到叢集中 本文是由凱哥(凱哥Java

spring cloud系列教程-修改服務名稱及獲取註冊中心註冊者的資訊

spring cloud系列教程第八篇-修改服務名稱及獲取註冊中心註冊者的資訊 本文主要內容: 1:管理頁面主機名及訪問ip資訊提示修改 2:獲取當前註冊中心的服務列表及每個服務對於的服務提供者列表 本文是由凱哥(凱哥Java:kagejava)釋出的《spring cloud系列》教程的總第八篇:《修改服務

Spring Cloud系列教程-Eureka自我保護機制

Spring Cloud系列教程第九篇-Eureka自我保護機制 本文主要內容: 1:自我保護介紹 2:導致原因分析 3:怎麼禁止自我保護   本文是由凱哥(凱哥Java:kagejava)釋出的《spring cloud系列》教程的總第九篇: 本文是幾個維度中的第一個維度:註冊與發現維度配置中

Spring cloud系列教程- Spring cloud整合Eureka總結

Spring cloud系列教程第十篇- Spring cloud整合Eureka總結篇 本文主要內容: 1:spring cloud整合Eureka總結 本文是由凱哥(凱哥Java:kagejava)釋出的《spring cloud系列》教程的總第十篇: 本文是幾個維度中的第一個維度:註冊與發現維度配置中心

SpringBoot自學教程 | Spring Boot整合mybatis

整合 com 字段 apach param pack image ice rac   引入依賴   1:在pom文件引入mybatis-spring-boot-starter的依賴: 1 <dependency> 2 <groupId>

nginx教程ngx_http_core_module模組提供的變數

在記錄access_log訪問日誌檔案時, 可以使用ngx_http_core_module模組處理請求時所產 生的豐富的變數, 當然, 這些變數還可以用於其他HTTP模組。 例如: 當URI中的某個

Spring Boot整合Spring Cache

為了提高效能,減少資料庫的壓力,使用快取是非常好的手段之一。因此本文講解 Spring Boot 如何整合快取管理。 宣告式快取 Spring 定義 CacheManager 和 Cache 介面用來統一不同的快取技術。例如 JCache、 EhCache、 Hazelcast、

JVM基礎系列教程|Java GC 日誌分析

推薦視訊連結 什麼是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)機制,是Java與C++/C的主要區別之一,作為Java開發者,一般不需要專門編寫記憶體回收和垃圾清理程式碼,對記憶體洩露和溢位的問題,也不需要像

OpenCV學習系列教程測試和提高程式碼的效率

Opencv-Python學習系列教程第五篇 來自opencv-python官方學習文件,本人謹做翻譯和註釋,以及一些自己的理解 本文由作者翻譯並進行程式碼驗證,轉載請註明出處~ 官方文件請參閱:https://docs.opencv.org/4.0.1/dc/d71/tutorial_py_optim

Spring Boot動態修改日誌級別

Spring Boot 1.5.X版本引入的一個新的控制端點:/loggers,該端點將為我們提供動態修改Spring Boot應用日誌級別的強大功能。該功能的使用非常簡單,它依然延續了Spring Boot自動化配置的實現,所以只需要在引入了spring-boot-star

史上最簡單的SpringCloud教程 高可用的分散式配置中心(Spring Cloud Config)

最新Finchley版本請訪問: https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f7-config/ 或者 http://blog.csdn.net/forezp/article/details/81041

Spring Cloud系列教程 | 十四Spring Cloud與Kubernetes的整合

推薦 Spring Cloud 視訊: Spring Cloud與Kubernetes的整合      Spring Cloud提供了專門的spring-cloud-kubernetes專案與k8s整合,儘管k8s提供了服務註冊和發現等功能與Spring cl