最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cloud Zuul添加過(guò)濾器過(guò)程解析

 更新時(shí)間:2019年12月04日 08:33:15   作者:SongAlone  
這篇文章主要介紹了Spring Cloud Zuul添加過(guò)濾器過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Spring Cloud Zuul添加過(guò)濾器過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Zuul作為網(wǎng)關(guān)的其中一個(gè)重要功能,就是實(shí)現(xiàn)請(qǐng)求的鑒權(quán)。而這個(gè)動(dòng)作我們往往是通過(guò)Zuul提供的過(guò)濾器來(lái)實(shí)現(xiàn)的。

一、過(guò)濾器方法的作用

想要使用Zuul實(shí)現(xiàn)過(guò)濾功能,我們需要自定義一個(gè)類繼承ZuulFilter類,并實(shí)現(xiàn)其中的四個(gè)方法,我們先看一下這四個(gè)方法的作用是什么

public class MyFilter extends ZuulFilter {
  /**
   * filterType:返回字符串,代表過(guò)濾器的類型。包含以下4種:
   * -- pre:請(qǐng)求在被路由之前執(zhí)行
   * -- route:在路由請(qǐng)求時(shí)調(diào)用
   * -- post:在route和errror過(guò)濾器之后調(diào)用
   * -- error:處理請(qǐng)求時(shí)發(fā)生錯(cuò)誤調(diào)用
   * @return 返回以上四個(gè)類型的名稱
   */
  @Override
  public String filterType() {
    return null;
  }

  /**
   * filterOrder:通過(guò)返回的int值來(lái)定義過(guò)濾器的執(zhí)行順序,數(shù)字越小優(yōu)先級(jí)越高。
   * @return
   */
  @Override
  public int filterOrder() {
    return 0;
  }

  /**
   * shouldFilter:返回一個(gè)Boolean值,判斷該過(guò)濾器是否需要執(zhí)行。返回true執(zhí)行,返回false不執(zhí)行。
   * @return
   */
  @Override
  public boolean shouldFilter() {
    return false;
  }

  /**
   * run:編寫過(guò)濾器的具體業(yè)務(wù)邏輯。
   * @return
   * @throws ZuulException
   */
  @Override
  public Object run() throws ZuulException {
    return null;
  }
}

二、自定義過(guò)濾器

我這里以pre類型演示

@Component
public class LoginFilter extends ZuulFilter {

  //過(guò)濾類型 pre route post error
  @Override
  public String filterType() {
    return "pre";
  }

  //過(guò)濾優(yōu)先級(jí),數(shù)字越小優(yōu)先級(jí)越高
  @Override
  public int filterOrder() {
    return 10;
  }

  //是否執(zhí)行run方法
  @Override
  public boolean shouldFilter() {
    return true;
  }

  //過(guò)濾邏輯代碼
  @Override
  public Object run() throws ZuulException {
    //獲取zuul提供的上下文對(duì)象
    RequestContext context = RequestContext.getCurrentContext();
    //獲取request對(duì)象
    HttpServletRequest request = context.getRequest();
    //獲取請(qǐng)求參數(shù)
    String token = request.getParameter("username");
    //判斷
    if (StringUtils.isBlank(username)){
      //過(guò)濾該請(qǐng)求,不對(duì)其進(jìn)行路由
      context.setSendZuulResponse(false);
      //設(shè)置響應(yīng)碼401
      context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
      //設(shè)置響應(yīng)體
      context.setResponseBody("request error....");
    }
    // 校驗(yàn)通過(guò),把登陸信息放入上下文信息,繼續(xù)向后執(zhí)行
    context.set("username",username);
    return null;
  }
}

沒(méi)添加過(guò)濾功能之前是這樣的 ↓,無(wú)論加不加username都可以得到數(shù)據(jù)

添加了過(guò)濾功能之后是這樣的 ↓,只有加了username才能訪問(wèn)

F12打開控制臺(tái),發(fā)現(xiàn)響應(yīng)了401

三、過(guò)濾器執(zhí)行的聲明周期

過(guò)濾器執(zhí)行的聲明周期

正常流程:

請(qǐng)求到達(dá)首先會(huì)經(jīng)過(guò)pre類型過(guò)濾器,而后到達(dá)route類型,進(jìn)行路由,請(qǐng)求就到達(dá)真正的服務(wù)提供者,執(zhí)行請(qǐng)求,返回結(jié)果后,會(huì)到達(dá)post過(guò)濾器。而后返回響應(yīng)。

異常流程:

整個(gè)過(guò)程中,pre或者route過(guò)濾器出現(xiàn)異常,都會(huì)直接進(jìn)入error過(guò)濾器,在error處理完畢后,會(huì)將請(qǐng)求交給POST過(guò)濾器,最后返回給用戶。

如果是error過(guò)濾器自己出現(xiàn)異常,最終也會(huì)進(jìn)入POST過(guò)濾器,將最終結(jié)果返回給請(qǐng)求客戶端。

如果是POST過(guò)濾器出現(xiàn)異常,會(huì)跳轉(zhuǎn)到error過(guò)濾器,但是與pre和route不同的是,請(qǐng)求不會(huì)再到達(dá)POST過(guò)濾器了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMVC中的DispatcherServlet初始化流程詳解

    SpringMVC中的DispatcherServlet初始化流程詳解

    這篇文章主要介紹了SpringMVC中的DispatcherServlet初始化流程詳解,DispatcherServlet這個(gè)前端控制器是一個(gè)Servlet,所以生命周期和普通的Servlet是差不多的,在一個(gè)Servlet初始化的時(shí)候都會(huì)調(diào)用該Servlet的init()方法,需要的朋友可以參考下
    2023-12-12
  • SpringBoot實(shí)現(xiàn)簡(jiǎn)單的日志鏈路追蹤

    SpringBoot實(shí)現(xiàn)簡(jiǎn)單的日志鏈路追蹤

    隨著分布式應(yīng)用的普及,現(xiàn)在的一些應(yīng)用系統(tǒng)不再像以前,所有的文件(前后端程序)都打包在一個(gè)包中,本文通過(guò)一個(gè)簡(jiǎn)單的SpringBoot應(yīng)用來(lái)總結(jié),我們?nèi)绾螌⑷罩敬?lián)起來(lái),文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • java interface的兩個(gè)經(jīng)典用法

    java interface的兩個(gè)經(jīng)典用法

    這篇文章主要為大家詳細(xì)介紹了java interface的兩個(gè)經(jīng)典用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 如何在不使用spring框架中使用aop的功能

    如何在不使用spring框架中使用aop的功能

    這篇文章主要介紹了如何在不使用spring框架中使用aop的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • MyBatis中的ResultMap的association和collection標(biāo)簽詳解

    MyBatis中的ResultMap的association和collection標(biāo)簽詳解

    這篇文章主要介紹了MyBatis中的ResultMap的association和collection標(biāo)簽詳解,主要包括association標(biāo)簽常用參數(shù)及id & result標(biāo)簽參數(shù)詳解,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • java中url任意跳轉(zhuǎn)漏洞的解決

    java中url任意跳轉(zhuǎn)漏洞的解決

    URL任意跳轉(zhuǎn)漏洞是一種安全漏洞,它發(fā)生在應(yīng)用程序沒(méi)有正確地驗(yàn)證目標(biāo)URL,允許攻擊者將用戶重定向到惡意網(wǎng)站,本文就來(lái)介紹一下漏洞的解決修復(fù)方案,感興趣的可以了解一下
    2024-06-06
  • Java中Map循環(huán)遍歷的五種方法實(shí)現(xiàn)

    Java中Map循環(huán)遍歷的五種方法實(shí)現(xiàn)

    本文主要介紹了Java中Map循環(huán)遍歷的五種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot激活profiles的幾種方式

    SpringBoot激活profiles的幾種方式

    多環(huán)境是最常見的配置隔離方式之一,可以根據(jù)不同的運(yùn)行環(huán)境提供不同的配置信息來(lái)應(yīng)對(duì)不同的業(yè)務(wù)場(chǎng)景,這篇文章主要介紹了SpringBoot激活profiles的幾種方式,需要的朋友可以參考下
    2019-10-10
  • SpringBoot中WebClient的實(shí)踐

    SpringBoot中WebClient的實(shí)踐

    SpringBoot中的WebClient是一個(gè)用于與RESTful服務(wù)交互的非阻塞、響應(yīng)式HTTP客戶端,本文就來(lái)介紹一下SpringBoot中WebClient的實(shí)踐,感興趣的可以了解一下
    2024-12-12
  • java使用poi讀取ppt文件和poi讀取excel、word示例

    java使用poi讀取ppt文件和poi讀取excel、word示例

    這篇文章主要介紹了java使用poi讀取ppt文件和poi讀取excel、word示例,需要的朋友可以參考下
    2014-03-03

最新評(píng)論

化州市| 瑞金市| 阿拉善盟| 三河市| 湖南省| 昆山市| 沁水县| 密云县| 彩票| 元氏县| 辽阳市| 宜兴市| 朔州市| 景宁| 安徽省| 内黄县| 金华市| 洛阳市| 宜春市| 崇州市| 洞口县| 平邑县| 日照市| 临汾市| 北宁市| 岳池县| 磐石市| 韶关市| 偏关县| 贡觉县| 监利县| 双鸭山市| 克东县| 临武县| 佛教| 阳朔县| 齐齐哈尔市| 清原| 富源县| 正蓝旗| 枝江市|