Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn)
服務(wù)網(wǎng)關(guān)的要素
- 穩(wěn)定性
- 安全性
- 性能,并發(fā)性
- 擴(kuò)展性
Spring Cloud Zuul
- 路由+過(guò)濾器 - 核心是一系列的過(guò)濾器


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

