本篇內(nèi)容主要講解“怎么使用Spring Cloud的Zuul網(wǎng)關(guān)和JWT身份驗(yàn)證”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么使用Spring Cloud的Zuul網(wǎng)關(guān)和JWT身份驗(yàn)證”吧!
為寧城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及寧城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、寧城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Zuul,是spring cloud 全家桶中的網(wǎng)關(guān)
網(wǎng)關(guān):程序統(tǒng)一入口。主要功能:服務(wù)分發(fā)(動(dòng)態(tài)路由),服務(wù)鑒權(quán) 等。
需求
//已有訪問路徑 http://localhost:8080/user //通過網(wǎng)關(guān)希望訪問路徑 http://localhost:10010/userservice/user
步驟0:創(chuàng)建 zuul_demo
步驟一:修改pom文件,添加 zuul 、測(cè)試 依賴
步驟二:創(chuàng)建啟動(dòng)類,添加 開啟網(wǎng)關(guān)代理 注解 @EnableZuulProxy
步驟三:創(chuàng)建yml文件,配置端口、服務(wù)名、對(duì)應(yīng)關(guān)系(訪問路徑 / 服務(wù)地址)
步驟0:創(chuàng)建 zuul_demo
步驟一:修改pom文件,添加 zuul 、測(cè)試 依賴
<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>
步驟二:創(chuàng)建啟動(dòng)類,添加 開啟網(wǎng)關(guān)代理 注解 @EnableZuulProxy
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //開啟網(wǎng)關(guān)代理 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步驟三:創(chuàng)建yml文件,配置端口、服務(wù)名、對(duì)應(yīng)關(guān)系(訪問路徑 / 服務(wù)地址)
server: port: 10010 spring: application: name: zuuldemo2 #網(wǎng)關(guān)配置:訪問路徑 和 服務(wù)路徑 對(duì)應(yīng)關(guān)系 zuul: routes: userservice: path: /userservice/** #訪問路徑 url: http://localhost:8080 #服務(wù)路徑
步驟一:搭建eureka客戶端(pom依賴、啟動(dòng)類注解、yml注冊(cè)地址)
pom依賴
<!--添加eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
啟動(dòng)類
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 //開啟網(wǎng)關(guān)代理 @EnableEurekaClient //開啟eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
yml文件
#注冊(cè)地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
步驟二:yml文件對(duì)應(yīng)關(guān)系 (訪問路徑 和 服務(wù)名)
#網(wǎng)關(guān)配置:訪問路徑 和 服務(wù)路徑 對(duì)應(yīng)關(guān)系 zuul: routes: userservice: path: /userservice/** #訪問路徑 #url: http://localhost:8080 #服務(wù)路徑 serviceId: userservice #服務(wù)名稱時(shí)
路由名稱 和 服務(wù)名 通常采用一樣的命名,zuul允許簡(jiǎn)化
zuul: routes: userservice: /userservice/**
默認(rèn)情況下,一切服務(wù)的映射路徑就是服務(wù)名本身。
##默認(rèn)配置 zuul: routes: adminservice: /adminservice/**
步驟0:創(chuàng)建項(xiàng)目 zuul_demo
步驟一:修改pom文件,添加 zuul依賴、eureka 客戶端依賴
<dependencies> <!--網(wǎng)關(guān)依賴--> <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> <!--測(cè)試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
步驟二:創(chuàng)建啟動(dòng)類,添加2添加 開啟網(wǎng)關(guān)代理、開啟eureka客戶端
開啟網(wǎng)關(guān)代理 @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 //開啟網(wǎng)關(guān)代理 @EnableEurekaClient //開啟eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步驟三:創(chuàng)建yml文件,配置端口號(hào)、服務(wù)名、注冊(cè)地址
server: port: 10010 spring: application: name: zuuldemo2 #注冊(cè)地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
路由前綴:用于維護(hù) 版本號(hào) 或 項(xiàng)目名
修改yml文件,進(jìn)行配置
zuul: prefix: /api
訪問
編寫過濾器,繼承父類:ZuulFilter
常見方法:
filterType() 過濾器類型,取值:"pre"
filterOrder() 過濾器順序,取值:1
shouldFilter() 是否執(zhí)行,取值:true
run() 執(zhí)行業(yè)務(wù)邏輯
只要將過濾器的實(shí)現(xiàn),添加到spring容器中,zuul將自動(dòng)啟用過濾器。
過濾器父類:ZuulFilter
工具類(請(qǐng)求上下文對(duì)象):RequestContext
特殊請(qǐng)求頭: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 是否執(zhí)行 } @Override public Object run() throws ZuulException { // 獲得一個(gè)特殊請(qǐng)求頭,判斷是否有值:有 返回 null(放行) , 沒有 響應(yīng)狀態(tài)碼401 //1 獲得工具類(請(qǐng)求上下文對(duì)象) RequestContext requestContext = RequestContext.getCurrentContext(); //2 通過工具類獲得request對(duì)象 HttpServletRequest request = requestContext.getRequest(); //3 通過request對(duì)象獲得特殊請(qǐng)求頭 String auth = request.getHeader("authorization"); //4 判斷 if(auth == null){ //沒有 requestContext.setSendZuulResponse(false); //關(guān)閉響應(yīng) requestContext.setResponseStatusCode(401); } //放行 return null; } }
eureka :注冊(cè)中心
服務(wù)端:提供注冊(cè)
客戶端:進(jìn)行注冊(cè)
ribbon:負(fù)載均衡(集群)
Hystrix:熔斷器,執(zhí)行備選方案
Feign:遠(yuǎn)程調(diào)用
Zuul:網(wǎng)關(guān),統(tǒng)一入口。
服務(wù)與服務(wù)之間共享數(shù)據(jù),采用JWT先生成數(shù)據(jù),在另一個(gè)服務(wù)中解析數(shù)據(jù),為了保證數(shù)據(jù)安全性,使用RAS對(duì)數(shù)據(jù)進(jìn)行加密。
RAS 非對(duì)稱加密算法
同時(shí)生產(chǎn)一對(duì)秘鑰:公鑰和私鑰。
公鑰秘鑰:用于加密
私鑰秘鑰:用于解密
特點(diǎn)
編寫測(cè)試類使用工具生成公鑰,私鑰
//生成公鑰和私鑰 RasUtils.generateKey(公鑰位置,私鑰位置,密碼); RasUtils.generateKey(pubKeyPath,priKeyPath,"234"); //獲得公鑰 RasUtils.getPublicKey(pubKeyPath); //獲得私鑰 RasUtils.getPrivateKey(priKeyPath);
JWT 基于JSON的認(rèn)證規(guī)范。(Json Web Token)
使用JWT目的:生成數(shù)據(jù)、解析數(shù)據(jù)
使用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> <!--網(wǎng)關(guān)依賴--> <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> <!--測(cè)試--> <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>
步驟二:導(dǎo)入工具
步驟三:使用
//生成數(shù)據(jù), UserInfo --> String(加密) //JwtUtils.generateToken(數(shù)據(jù),過期時(shí)間(分鐘), 私鑰) String token = JwtUtils.generateToken(userInfo,30, RasUtils.getPrivateKey(priKeyPath)); //解析數(shù)據(jù), String(加密) --> UserInfo // JwtUtils.getObjectFromToken(加密數(shù)據(jù), 公鑰, 封裝對(duì)象.class); UserInfo userInfo = JwtUtils.getObjectFromToken(token, RasUtils.getPublicKey(pubKeyPath), UserInfo.class);
到此,相信大家對(duì)“怎么使用Spring Cloud的Zuul網(wǎng)關(guān)和JWT身份驗(yàn)證”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
名稱欄目:怎么使用SpringCloud的Zuul網(wǎng)關(guān)和JWT身份驗(yàn)證
當(dāng)前網(wǎng)址:http://www.rwnh.cn/article8/pcogip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、自適應(yīng)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、用戶體驗(yàn)、Google、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)