您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么使用Spring Cloud中API網關”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Spring Cloud中API網關”吧!
一、為什么需要網關?
安全性:
1.最主要的一點是網關可以將所有服務的API接口統一聚合,并統一對外暴露。外界系統調用API接口時,都是由網關對外暴露的API接口,外界系統不需要知道微服務系統中各個服務之間相互調用的復雜性。微服務系統也保護了七內部微服務單元的API接口,防止其被外部直接調用,導致服務的敏感信息泄露。
2.網關可以做用戶身份認證和權限認證,防止非法請求操作API接口,對服務器起到保護作用。
性能:
1.zuul、ribbon、eureka相結合,可以實現路由和負載均衡的功能,zuul可以將請求流量按照默認輪詢策略分發到集群狀態下的不同服務實例。
作用:
1.可以實現負載均衡、路由轉發、實時日志輸出、權限控制、系統監控等
2.可以實現流量監控,在高流量的情況下,對服務進行降級
二、網關框架分類
1.Netflix Zuul,zuul是spring cloud的一個推薦組件,https://github.com/Netflix/zuul
--本博客講解Zuul
2.Kong kong是基于Nginx+Lua進行二次開發的方案, https://konghq.com/
3.orange,這個開源程序是國人開發的, http://orange.sumory.com/
三、怎么使用網關(Zuul)==>實戰?
1.jar包依賴
<groupId>com.suning.drp</groupId>
<artifactId>drp-gateway</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<parent>
<artifactId>drp-parent</artifactId>
<groupId>com.suning.drp</groupId>
<version>0.0.1</version>
<relativePath>../drp-parent/pom.xml</relativePath>
</parent>
<dependencies>
<!-- spring boot 1.X版本所依賴的zuul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- spring boot 2.X版本所依賴的zuul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- SpringBoot整合eureka客戶端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
2.配置文件
### eureka注冊服務中心
server.port=80
eureka.client.serviceUrl.defaultZone=${eurekaServiceDefaultZone}
### eurekaServiceDefaultZone取值不同環境下的值,例子取的生產中的值,vars.prd.properties
eurekaServiceDefaultZone=http://10.235.5.28:8080/eureka,http://10.235.5.29:8080/eureka,http://10.235.5.30:8080/eureka
### 網關名稱
spring.application.name=tigbs-gateway
### 反向代理,將服務的IP隱藏,通過項目名訪問
### 以/cms/訪問的請求地址轉發到管理端
zuul.routes.cms.path=/cms/**
zuul.routes.cms.serviceId=drp-cms
### 以/portal/訪問的請求地址轉發到管理端
zuul.routes.portal.path=/portal/**
zuul.routes.portal.serviceId=drp-portal
3.啟動類
// EnableZuulProxy開啟zuul功能
@EnableZuulProxy
// EnableEurekaClient將網關服務當做客戶端注冊到eureka服務中心
@EnableEurekaClient
@SpringBootApplication
public class GateWayServiceApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GateWayServiceApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(GateWayServiceApplication.class);
}
}
4.業務代碼--驗證用戶在客戶端是否有登陸
@Component
public class TokenFilter extends ZuulFilter {
//具體過濾的邏輯
public Object run() throws ZuulException {
// 獲取上下文
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
String userToken = request.getParameter("userToken");
if (StringUtils.isEmpty(userToken)) {
currentContext.setSendZuulResponse(false);
currentContext.setResponseStatusCode(401);
currentContext.setResponseBody("userToken is empty");
return null;
}
// 否則正常執行業務邏輯.....
return null;
}
// 判斷過濾器是否生效,為true,說明需要過濾,則執行run()
public boolean shouldFilter() {
return true;
}
// 過濾器的執行順序。當請求在一個階段的時候存在多個多個過濾器時,需要根據該方法的返回值依次執行
// 優先級為0,數字越小,越早執行該過濾器
public int filterOrder() {
return 0;
}
// 過濾器類型:pre,post,routing,error四種。 pre表示在請求之前進行攔截
public String filterType() {
return "pre";
}
}
到此,相信大家對“怎么使用Spring Cloud中API網關”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。