成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringCloud系列之Zuul網關和Zuul過濾器

開發 架構
Zuul是SpringCloud全家桶的微服務網關。所有從app或者網站(第三方)來的請求都會經過Zuul到達后端的Netflix應用程序。

Zuul網關

什么是Zuul網關?

Zuul是SpringCloud全家桶的微服務網關。所有從app或者網站(第三方)來的請求都會經過Zuul到達后端的Netflix應用程序。作為一個邊界性質的應用程序,Zuul提供了動態路由、監控、彈性負載和安全功能。

Zuul底層利用filter實現如下功能:

  1. 認證和安全,識別每個需要認證的資源,拒絕不服務要求的請求。
  2. 性能檢測,在服務邊界追蹤并統計數據,提供精確的生產視圖。
  3. 動態路由,根據需要將請求動態路由到后端集群。
  4. 壓力測試,逐漸增加對集群的流量以及了解其性能。
  5. 負載卸載,預先為每種類型的請求分配容量,當請求超過流量時自動丟棄。靜態資源處理,直接在邊界返回某種響應。
  6. 靜態資源處理,直接在Zuul處理靜態資源并響應,而并非轉發這些請求到內部集群中。
  7. 多區域彈性,跨越AWS區域進行請求路由,旨在實現ELB使用多樣化并保證邊緣位置與使用者盡可能接近。

Zuul網關Demo

引入jar包:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>

配置文件:application.yml。

server:
port: 7004 # 端口
spring:
application:
name: zuul-getway # 服務名
eureka:
client:
service-url:
defaultZone: http://jack:666@localhost:8764/eureka/ # 需要注冊到eureka
instance:
instance-id: ${spring.application.name}:${server.port}
zuul:
routes:
order-service: /od/** # 對某個服務自定義路由規則
serviceId: order-service # 這個配置可以實現負載均衡,默認是輪詢
# 設置某些服務不要進行反向代理 進行路由,多個服務用逗號隔開
ignored-services: order-service, user-service
prefix: /api # 請求路徑的前綴

查看是否注冊到eureka。

Eureka注冊中心

訪問路徑:

localhost:7004/api/od/getOrder?token=1235。

(后面帶token是因為我配置了pre過濾器,下面會介紹)。

Zuul過濾器

Zuul四種過濾器類型,這些類型對應請求的生命周期

  • pre(前置):在請求被路由之前調用。可利用這種過濾器來實現身份認證、在集群中選擇請求的微服務,記錄調試等。
  • routing(路由):將請求路由到微服務。用于構建發送給微服務的請求,并使用apache httpclient或netflix ribbon請求微服務。
  • post(后置):在路由到微服務后執行。可用于響應添加標準的http header、收集統計信息和指標、將響應從微服務發送到客戶端。
  • error(錯誤):在其他階段發送錯誤時執行該過濾器。

注:除了默認的過濾器類型以外Zuul還允許創建自定義的過濾器類型。

如何禁用過濾器?

很簡單,只需設置zuul.ClassName.filterType.disable=true ,即可禁用SimpleClassName所對應的過濾器。例如:zuul.TokenFilter.pre.disable=true; 即可禁用TokenFilter過濾器。

pre過濾器

例子: 鑒權認證。如果參數帶了token就允許訪問。

/**
* pre過濾器
* @Author Big.Hu
*/
@Component
public class TokenFilter extends ZuulFilter {
@Override
public Object run() {
System.err.println("執行pre前置過濾器。。。。。。。。。");
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
StringBuffer requestURL = request.getRequestURL();
System.out.println("requestURL:" + requestURL);
// 獲取請求的參數
String token = request.getParameter("token");
if (StringUtils.isEmpty(token)) {
// 如果參數為空則過濾該請求,不對其進行路由
currentContext.setSendZuulResponse(false);
// 設置錯誤碼:401
currentContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
currentContext.set("SUCCESS", false);
} else {
// 不過濾該請求,對其進行路由
currentContext.setSendZuulResponse(true);
// 設置成功碼:200
currentContext.setResponseStatusCode(HttpStatus.SC_OK);
currentContext.set("SUCCESS", true);
}
System.out.println("token:" + token);
return null;
}
/**
* 當前filter類型:pre、post、route、error
*/
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
/**
* 表示當前filter優先級
*/
@Override
public int filterOrder() {
return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1;
}
/**
* 是否執行該過濾器?
**/
@Override
public boolean shouldFilter() {
return true;
}
}

POST過濾器

例: 在返回的時候設置一個cookie。

/**
* Post過濾器
* @Author Big.Hu
*/
@Component
public class PostFilter extends ZuulFilter {
/**
* POST過濾器:在route和error過濾器之后執行
*/
@Override
public String filterType() {
return FilterConstants.POST_TYPE;
}
@Override
public int filterOrder() {
return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
System.err.println("執行Post過濾器。。。。。。。。。");
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletResponse response = currentContext.getResponse();
Cookie cookie = new Cookie("name", "Jack.Hu");
cookie.setMaxAge(60 * 60 * 24);
response.addCookie(cookie);
return null;
}
}

訪問路徑:

localhost:7004/api/od/getOrder。

(沒帶token參數)請求被pre過濾器過濾掉了。

不帶token請求

帶上token參數請求成功!

帶token請求

再按f12看post過濾器設置的cookie。

查看cookie

控制臺:

控制臺

責任編輯:姜華 來源: 今日頭條
相關推薦

2017-04-12 14:43:01

Spring ClouZuul過濾器

2017-05-04 22:30:17

Zuul過濾器微服務

2023-07-17 08:02:44

ZuulIO反應式

2023-05-29 14:07:00

Zuul網關系統

2020-11-18 11:26:45

SpringCloudZuulJava

2022-05-20 12:14:50

ZuulSpringClou

2024-08-05 10:03:53

2017-07-18 14:10:31

大數據Apache Flum過濾器

2017-10-18 16:00:14

SpringCloudZuul路徑

2024-11-04 08:45:48

布隆過濾器元數據指紋值

2024-12-06 14:34:00

Spring過濾器

2021-07-05 15:22:03

Servlet過濾器客戶端

2024-01-05 09:04:35

隆過濾器數據結構哈希函數

2009-07-08 15:30:56

Servlet過濾器

2009-07-14 09:09:08

Swing模型過濾器

2009-07-08 16:07:04

Servlet過濾器配

2009-09-29 13:55:23

Hibernate設置

2011-06-29 16:14:59

Qt 事件 過濾器

2011-03-07 09:33:18

FileZilla

2023-04-14 09:01:25

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级淫片免费视频 | 欧美日韩成人在线观看 | 日韩一二区在线观看 | 欧美日韩高清一区 | 日韩一区在线播放 | 黄色片视频网站 | 四虎影院一区二区 | 精品美女| 精品欧美一区二区精品久久 | 日本免费一区二区三区四区 | 日韩第一夜 | 欧美日韩高清一区 | 天天搞夜夜操 | 亚洲一区在线观看视频 | 一区二区三区在线播放 | 九九九久久国产免费 | 蜜臀91视频 | 精品欧美| 欧美午夜精品久久久久免费视 | 国产精品夜间视频香蕉 | h片在线播放 | 一区在线观看 | 国产欧美日韩在线一区 | www.日韩欧美 | 日韩精品一区中文字幕 | 99影视| 超碰在线观看97 | 成人在线视频免费观看 | 在线亚洲欧美 | 国产精品一区二区三区99 | 91 久久 | 国产成人精品一区二区三区网站观看 | 中文二区 | 欧美久久一区二区 | 日韩精品一区二区三区中文在线 | 欧美日韩视频在线第一区 | 国产一区二区三区四区 | 亚洲精品一区中文字幕乱码 | 日韩在线电影 | 精品国产91| 亚洲成人一区二区 |