統一鑒權


統一鑒權

內置的過濾器已經可以完成大部分的功能,但是對於企業開發的一些業務功能處理,還是需要我們自己編寫過濾器來實現的,那么我們一起通過代碼的形式自定義一個過濾器,去完成統一的權限校驗。

鑒權邏輯

開發中的鑒權邏輯:
  當客戶端第一次請求服務時,服務端對用戶進行信息認證(登錄)
  認證通過,將用戶信息進行加密形成token,返回給客戶端,作為登錄憑證
  以后每次請求,客戶端都攜帶認證的token
  服務端對token進行解密,判斷是否有效。
如上圖,對於驗證用戶是否已經登錄鑒權的過程可以在網關層統一檢驗。檢驗的標准就是請求中是否攜帶token憑證以及token的正確性。 

代碼實現

下面的我們自定義一個GlobalFilter,去校驗所有請求的請求參數中是否包含“token”,如何不包含請求參數“token”則不轉發路由,否則執行正常的邏輯。
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain
chain) {
      //String url = exchange.getRequest().getURI().getPath();
      //忽略以下url請求
      //if(url.indexOf("/login") >= 0){
      //  return chain.filter(exchange);
     // }
      String token = exchange.getRequest().getQueryParams().getFirst("token");
      if (StringUtils.isBlank(token)) {
          log.info( "token is empty ..." );
          exchange.getResponse().setStatusCode( HttpStatus.UNAUTHORIZED );
          return exchange.getResponse().setComplete();
      }
      return chain.filter(exchange);
  }
  @Override
  public int getOrder() {
      return 0;
  }
}
自定義全局過濾器需要實現GlobalFilter和Ordered接口。
在fifilter方法中完成過濾器的邏輯判斷處理
在getOrder方法指定此過濾器的優先級,返回值越大級別越低
ServerWebExchange 就相當於當前請求和響應的上下文,存放着重要的請求-響應屬性、請求實例和響應實例等等。一個請求中的request,response都可以通過 ServerWebExchange 獲取
調用 chain.filter 繼續向下游執行 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM