您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關怎么在Spring Cloud中使用Zuul實現服務網關,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Spring Cloud Zuul
- 路由+過濾器 - 核心是一系列的過濾器
Zuul路由配置
management: security: enabled: false // 權限設置 zuul: routes: # myProduct: // 這個名稱可以隨便填 # path: /myProduct/** # serviceId: product # sensitiveHeader: //敏感頭過濾 # 簡潔寫法 product: /myProduct/** ignored-patterns: - /**/product/listForOrder // 不對外部訪問(-代表set集合)
查看所有的路由規則:localhost:port/application/routes { /myProduct/**: "product", /config/**: "config", /product/**: "product", }
Zuul配置的動態注入(也可以寫入啟動類中)
@Compoent public class ZuulConfig{ @ConfigurationProperties("zuul") @RefreshScope public ZuulProperties zuulProperties(){ return new ZuulProperties(); } }
典型應用場景
前置過濾器
- 限流 - 鑒權 - 參數校驗調整
后置過濾器
- 統計 - 日志
要想實現Filter,需要以下幾個步驟:
1、繼承ZuulFilter類,為了驗證Filter的特性,我們這里創建3個Filter
根據用戶名來過濾
package com.chhliu.springcloud.zuul; import javax.servlet.http.HttpServletRequest; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; public class AccessUserNameFilter extends ZuulFilter { @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); System.out.println(String.format("%s AccessUserNameFilter request to %s", request.getMethod(), request.getRequestURL().toString())); String username = request.getParameter("username");// 獲取請求的參數 if(null != username && username.equals("chhliu")) {// 如果請求的參數不為空,且值為chhliu時,則通過 ctx.setSendZuulResponse(true);// 對該請求進行路由 ctx.setResponseStatusCode(200); ctx.set("isSuccess", true);// 設值,讓下一個Filter看到上一個Filter的狀態 return null; }else{ ctx.setSendZuulResponse(false);// 過濾該請求,不對其進行路由 ctx.setResponseStatusCode(401);// 返回錯誤碼 ctx.setResponseBody("{\"result\":\"username is not correct!\"}");// 返回錯誤內容 ctx.set("isSuccess", false); return null; } } @Override public boolean shouldFilter() { return true;// 是否執行該過濾器,此處為true,說明需要過濾 } @Override public int filterOrder() { return 0;// 優先級為0,數字越大,優先級越低 } @Override public String filterType() { return "pre";// 前置過濾器 } }
看完上述內容,你們對怎么在Spring Cloud中使用Zuul實現服務網關有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。