Spring Cloud 服務網(wǎng)關Zuul的實現(xiàn)
服務網(wǎng)關的要素
- 穩(wěn)定性
- 安全性
- 性能,并發(fā)性
- 擴展性
Spring Cloud Zuul
- 路由+過濾器 - 核心是一系列的過濾器
Zuul路由配置
management: security: enabled: false // 權限設置 zuul: routes: # myProduct: // 這個名稱可以隨便填 # path: /myProduct/** # serviceId: product # sensitiveHeader: //敏感頭過濾 # 簡潔寫法 product: /myProduct/** ignored-patterns: - /**/product/listForOrder // 不對外部訪問(-代表set集合)
查看所有的路由規(guī)則:localhost:port/application/routes { /myProduct/**: "product", /config/**: "config", /product/**: "product", }
Zuul配置的動態(tài)注入(也可以寫入啟動類中)
@Compoent public class ZuulConfig{ @ConfigurationProperties("zuul") @RefreshScope public ZuulProperties zuulProperties(){ return new ZuulProperties(); } }
典型應用場景
前置過濾器
- 限流 - 鑒權 - 參數(shù)校驗調(diào)整
后置過濾器
- 統(tǒng)計 - 日志
要想實現(xiàn)Filter,需要以下幾個步驟:
1、繼承ZuulFilter類,為了驗證Filter的特性,我們這里創(chuàng)建3個Filter
根據(jù)用戶名來過濾
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");// 獲取請求的參數(shù) if(null != username && username.equals("chhliu")) {// 如果請求的參數(shù)不為空,且值為chhliu時,則通過 ctx.setSendZuulResponse(true);// 對該請求進行路由 ctx.setResponseStatusCode(200); ctx.set("isSuccess", true);// 設值,讓下一個Filter看到上一個Filter的狀態(tài) return null; }else{ ctx.setSendZuulResponse(false);// 過濾該請求,不對其進行路由 ctx.setResponseStatusCode(401);// 返回錯誤碼 ctx.setResponseBody("{\"result\":\"username is not correct!\"}");// 返回錯誤內(nèi)容 ctx.set("isSuccess", false); return null; } } @Override public boolean shouldFilter() { return true;// 是否執(zhí)行該過濾器,此處為true,說明需要過濾 } @Override public int filterOrder() { return 0;// 優(yōu)先級為0,數(shù)字越大,優(yōu)先級越低 } @Override public String filterType() { return "pre";// 前置過濾器 } }
參考:http://www.dbjr.com.cn/article/133244.htm
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Eclipse創(chuàng)建JavaWeb工程的完整步驟記錄
很多新手不知道Eclipse怎么創(chuàng)建Java Web項目,一起來看看吧,這篇文章主要給大家介紹了關于Eclipse創(chuàng)建JavaWeb工程的完整步驟,需要的朋友可以參考下2023-10-10在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的方法
這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運行java/scala/spark程序的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程
這篇文章主要為大家詳細介紹了win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程,感興趣的小伙伴們可以參考一下2016-06-06Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解
這篇文章主要介紹了Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07