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)潔寫法
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)注入(也可以寫入啟動(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.dhdzp.com/article/133244.htm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于java Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)詳解
這篇文章主要介紹了Java 實(shí)現(xiàn)簡(jiǎn)易教務(wù)管理系統(tǒng)的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析
這篇文章主要介紹了Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java對(duì)象創(chuàng)建的幾種方式總結(jié)
本文詳細(xì)介紹了Java中創(chuàng)建對(duì)象的五種方法,包括使用new關(guān)鍵字、Class的newInstance()方法、Constructor的newInstance()方法、克隆以及反序列化,同時(shí)討論了這些方式是否調(diào)用了構(gòu)造器以及創(chuàng)建對(duì)象的條件,文章還提供了示例代碼進(jìn)行演示,需要的朋友可以參考下2025-02-02
通過(guò)代碼示例了解submit與execute的區(qū)別
這篇文章主要介紹了通過(guò)代碼示例了解submit與execute的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java項(xiàng)目如何防止SQL注入(多種方案匯總)
SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒(méi)有判斷或過(guò)濾不嚴(yán),攻擊者可以在web應(yīng)用程序中事先定義好的查詢語(yǔ)句的結(jié)尾上添加額外的SQL語(yǔ)句,這篇文章主要介紹了?Java項(xiàng)目防止SQL注入的四種方案,需要的朋友可以參考下2023-12-12

