您好,登錄后才能下訂單哦!
本篇文章為大家展示了SpringCloud中怎么實現服務網關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配置的動態注入(也可以寫入啟動類中)
@Compoentpublic 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";// 前置過濾器 } }
上述內容就是SpringCloud中怎么實現服務網關Zuul,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。