springCloud gateWay 統(tǒng)一鑒權(quán)的實(shí)現(xiàn)代碼
一,統(tǒng)一鑒權(quán)
內(nèi)置的過(guò)濾器已經(jīng)可以完成大部分的功能,但是對(duì)于企業(yè)開(kāi)發(fā)的一些業(yè)務(wù)功能處理,還是需要我們自己 編寫(xiě)過(guò)濾器來(lái)實(shí)現(xiàn)的,那么我們一起通過(guò)代碼的形式自定義一個(gè)過(guò)濾器,去完成統(tǒng)一的權(quán)限校驗(yàn)。
1.1 鑒權(quán)邏輯
開(kāi)發(fā)中的鑒權(quán)邏輯:
- 當(dāng)客戶端第一次請(qǐng)求服務(wù)時(shí),服務(wù)端對(duì)用戶進(jìn)行信息認(rèn)證(登錄)
- 認(rèn)證通過(guò),將用戶信息進(jìn)行加密形成token,返回給客戶端,作為登錄憑證
- 以后每次請(qǐng)求,客戶端都攜帶認(rèn)證的token
- 服務(wù)端對(duì)token進(jìn)行解密,判斷是否有效。

如上圖,對(duì)于驗(yàn)證用戶是否已經(jīng)登錄鑒權(quán)的過(guò)程可以在網(wǎng)關(guān)層統(tǒng)一檢驗(yàn)。檢驗(yàn)的標(biāo)準(zhǔn)就是請(qǐng)求中是否攜 帶token憑證以及token的正確性。
1.2 代碼實(shí)現(xiàn)
下面的我們自定義一個(gè)GlobalFilter,去校驗(yàn)所有請(qǐng)求的請(qǐng)求參數(shù)中是否包含“token”,如何不包含請(qǐng)求 參數(shù)“token”則不轉(zhuǎn)發(fā)路由,否則執(zhí)行正常的邏輯。
/**
* 自定義一個(gè)全局過(guò)濾器
* 實(shí)現(xiàn)globalfilter,ordered接口
*/
@Component
public class LoginFilter implements GlobalFilter, Ordered {
/**
* 執(zhí)行過(guò)濾器中的過(guò)濾邏輯
* @param exchange
* @param chain
* @return
*/
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("access-token");
if (token == null){
//如果為null,認(rèn)證失敗
System.out.println("沒(méi)有登錄");
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
System.out.println("觸發(fā)了全局過(guò)濾器!");
return chain.filter(exchange);
}
* 指定過(guò)濾器執(zhí)行順序,返回值越小,執(zhí)行優(yōu)先級(jí)越高
public int getOrder() {
return 0;
}- 自定義全局過(guò)濾器需要實(shí)現(xiàn)GlobalFilter和Ordered接口。
- 在filter方法中完成過(guò)濾器的邏輯判斷處理
- 在getOrder方法指定此過(guò)濾器的優(yōu)先級(jí),返回值越大級(jí)別越低
- ServerWebExchange 就相當(dāng)于當(dāng)前請(qǐng)求和響應(yīng)的上下文,存放著重要的請(qǐng)求-響應(yīng)屬性、請(qǐng)求實(shí) 例和響應(yīng)實(shí)例等等。一個(gè)請(qǐng)求中的request,response都可以通過(guò) ServerWebExchange 獲取
- 調(diào)用 chain.filter 繼續(xù)向下游執(zhí)行
此時(shí),如果我們請(qǐng)求的參數(shù)里沒(méi)有access-token 參數(shù),就會(huì)直接展示報(bào)錯(cuò)頁(yè)面

如果有access-token 參數(shù),就會(huì)正常返回。

到此這篇關(guān)于springCloud gateWay 統(tǒng)一鑒權(quán)的文章就介紹到這了,更多相關(guān)springCloud gateWay 統(tǒng)一鑒權(quán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)文件或文件夾的復(fù)制到指定目錄實(shí)例
本篇文章主要介紹了Java實(shí)現(xiàn)文件或文件夾的復(fù)制到指定目錄實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
controller接口跳轉(zhuǎn)到另一個(gè)controller接口的實(shí)現(xiàn)
這篇文章主要介紹了controller接口跳轉(zhuǎn)到另一個(gè)controller接口的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長(zhǎng)的問(wèn)題
這篇文章主要介紹了解決idea中svn提交時(shí)performing vcs refresh時(shí)間很長(zhǎng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
使用Spring Boot Maven插件的詳細(xì)方法
這篇文章主要介紹了如何使用Spring Boot Maven插件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過(guò)程圖解
這篇文章主要介紹了JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
淺談SpringCloud?Alibaba和SpringCloud的區(qū)別
這篇文章主要介紹了淺談SpringCloud?Alibaba和SpringCloud的區(qū)別,Spring?Cloud?Netflix框架也屬于Spring?Cloud,但是Netflix并不是由spring來(lái)進(jìn)行開(kāi)發(fā)的,需要的朋友可以參考下2023-05-05
優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn)
本文主要介紹了優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法
這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Java實(shí)現(xiàn)聯(lián)系人管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)聯(lián)系人管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

