您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”吧!
Zuul,是spring cloud 全家桶中的網關
網關:程序統一入口。主要功能:服務分發(動態路由),服務鑒權 等。
需求
//已有訪問路徑 http://localhost:8080/user //通過網關希望訪問路徑 http://localhost:10010/userservice/user
步驟0:創建 zuul_demo
步驟一:修改pom文件,添加 zuul 、測試 依賴
步驟二:創建啟動類,添加 開啟網關代理 注解 @EnableZuulProxy
步驟三:創建yml文件,配置端口、服務名、對應關系(訪問路徑 / 服務地址)
步驟0:創建 zuul_demo
步驟一:修改pom文件,添加 zuul 、測試 依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
步驟二:創建啟動類,添加 開啟網關代理 注解 @EnableZuulProxy
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //開啟網關代理 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步驟三:創建yml文件,配置端口、服務名、對應關系(訪問路徑 / 服務地址)
server: port: 10010 spring: application: name: zuuldemo2 #網關配置:訪問路徑 和 服務路徑 對應關系 zuul: routes: userservice: path: /userservice/** #訪問路徑 url: http://localhost:8080 #服務路徑
步驟一:搭建eureka客戶端(pom依賴、啟動類注解、yml注冊地址)
pom依賴
<!--添加eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
啟動類
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //開啟網關代理 @EnableEurekaClient //開啟eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
yml文件
#注冊地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
步驟二:yml文件對應關系 (訪問路徑 和 服務名)
#網關配置:訪問路徑 和 服務路徑 對應關系 zuul: routes: userservice: path: /userservice/** #訪問路徑 #url: http://localhost:8080 #服務路徑 serviceId: userservice #服務名稱時
路由名稱 和 服務名 通常采用一樣的命名,zuul允許簡化
zuul: routes: userservice: /userservice/**
默認情況下,一切服務的映射路徑就是服務名本身。
##默認配置 zuul: routes: adminservice: /adminservice/**
步驟0:創建項目 zuul_demo
步驟一:修改pom文件,添加 zuul依賴、eureka 客戶端依賴
<dependencies> <!--網關依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--添加eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
步驟二:創建啟動類,添加2添加 開啟網關代理、開啟eureka客戶端
開啟網關代理 @EnableZuulProxy
開啟eureka客戶端 @EnableEurekaClient
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //開啟網關代理 @EnableEurekaClient //開啟eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步驟三:創建yml文件,配置端口號、服務名、注冊地址
server: port: 10010 spring: application: name: zuuldemo2 #注冊地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
路由前綴:用于維護 版本號 或 項目名
修改yml文件,進行配置
zuul: prefix: /api
訪問
編寫過濾器,繼承父類:ZuulFilter
常見方法:
filterType() 過濾器類型,取值:"pre"
filterOrder() 過濾器順序,取值:1
shouldFilter() 是否執行,取值:true
run() 執行業務邏輯
只要將過濾器的實現,添加到spring容器中,zuul將自動啟用過濾器。
過濾器父類:ZuulFilter
工具類(請求上下文對象):RequestContext
特殊請求頭:Authorization(下圖是postman軟件)
package com.czxy.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; @Component public class LoginFilter extends ZuulFilter { @Override public String filterType() { return "pre"; //1 過濾器類型 } @Override public int filterOrder() { return 1; //2 過濾器排序 } @Override public boolean shouldFilter() { return true; //3 是否執行 } @Override public Object run() throws ZuulException { // 獲得一個特殊請求頭,判斷是否有值:有 返回 null(放行) , 沒有 響應狀態碼401 //1 獲得工具類(請求上下文對象) RequestContext requestContext = RequestContext.getCurrentContext(); //2 通過工具類獲得request對象 HttpServletRequest request = requestContext.getRequest(); //3 通過request對象獲得特殊請求頭 String auth = request.getHeader("authorization"); //4 判斷 if(auth == null){ //沒有 requestContext.setSendZuulResponse(false); //關閉響應 requestContext.setResponseStatusCode(401); } //放行 return null; } }
eureka :注冊中心
服務端:提供注冊
客戶端:進行注冊
ribbon:負載均衡(集群)
Hystrix:熔斷器,執行備選方案
Feign:遠程調用
Zuul:網關,統一入口。
服務與服務之間共享數據,采用JWT先生成數據,在另一個服務中解析數據,為了保證數據安全性,使用RAS對數據進行加密。
RAS 非對稱加密算法
同時生產一對秘鑰:公鑰和私鑰。
公鑰秘鑰:用于加密
私鑰秘鑰:用于解密
特點
編寫測試類使用工具生成公鑰,私鑰
//生成公鑰和私鑰 RasUtils.generateKey(公鑰位置,私鑰位置,密碼); RasUtils.generateKey(pubKeyPath,priKeyPath,"234"); //獲得公鑰 RasUtils.getPublicKey(pubKeyPath); //獲得私鑰 RasUtils.getPrivateKey(priKeyPath);
JWT 基于JSON的認證規范。(Json Web Token)
使用JWT目的:生成數據、解析數據
使用JWT
步驟一:添加依賴(含之前的)
<properties> <jwt.jjwt.version>0.9.0</jwt.jjwt.version> <jwt.joda.version>2.9.7</jwt.joda.version> <lombok.version>1.16.20</lombok.version> <beanutils.version>1.9.3</beanutils.version> </properties> <dependencies> <!--網關依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--添加eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--jwt依賴--> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>${beanutils.version}</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jwt.jjwt.version}</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${jwt.joda.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> </dependencies>
步驟二:導入工具
步驟三:使用
//生成數據, UserInfo --> String(加密) //JwtUtils.generateToken(數據,過期時間(分鐘), 私鑰) String token = JwtUtils.generateToken(userInfo,30, RasUtils.getPrivateKey(priKeyPath)); //解析數據, String(加密) --> UserInfo // JwtUtils.getObjectFromToken(加密數據, 公鑰, 封裝對象.class); UserInfo userInfo = JwtUtils.getObjectFromToken(token, RasUtils.getPublicKey(pubKeyPath), UserInfo.class);
到此,相信大家對“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。