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

Spring Cloud Zuul路由網(wǎng)關服務過濾實現(xiàn)代碼

 更新時間:2020年04月14日 11:23:05   作者:彭超  
這篇文章主要介紹了Spring Cloud Zuul路由網(wǎng)關服務過濾實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Zuul 簡介

Zuul 的主要功能是路由轉發(fā)和過濾器。路由功能是微服務的一部分,比如 /api/admin 轉發(fā)到到 Admin 服務,/api/member 轉發(fā)到到 Member 服務。Zuul 默認和 Ribbon 結合實現(xiàn)了負載均衡的功能。

引入依賴

在 pom.xml 中主要添加 spring-cloud-starter-netflix-eureka-server 和 spring-cloud-starter-netflix-zuul 依賴

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

相關配置

在 application.yml 中主要添加 Zuul 路由配置

zuul:
 routes:
  api-a:
   path: /api/ribbon/**
   serviceId: hello-spring-cloud-web-admin-ribbon
  api-b:
   path: /api/feign/**
   serviceId: hello-spring-cloud-web-admin-feign

路由說明:

以 /api/ribbon 開頭的請求都轉發(fā)給 spring-cloud-web-admin-ribbon 服務
以 /api/feign 開頭的請求都轉發(fā)給 spring-cloud-web-admin-feign 服務
在 Application 入口類中添加 @EnableZuulProxy 注解開啟 zuul 功能

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulApplication {
  public static void main(String[] args) {
    SpringApplication.run(ZuulApplication.class, args);
  }
}

配置網(wǎng)關路由失敗時的回調(diào)

創(chuàng)建 WebAdminFeignFallbackProvider 回調(diào)類

/**
 * 路由 hello-spring-cloud-web-admin-feign 失敗時的回調(diào)
 */
@Component
public class WebAdminFeignFallbackProvider implements FallbackProvider {

  @Override
  public String getRoute() {
    // ServiceId,如果需要所有調(diào)用都支持回退,則 return "*" 或 return null
    return "hello-spring-cloud-web-admin-feign";
  }

  /**
   * 如果請求服務失敗,則返回指定的信息給調(diào)用者
   * @param route
   * @param cause
   * @return
   */
  @Override
  public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
    return new ClientHttpResponse() {
      /**
       * 網(wǎng)關向 api 服務請求失敗了,但是消費者客戶端向網(wǎng)關發(fā)起的請求是成功的,
       * 不應該把 api 的 404,500 等問題拋給客戶端
       * 網(wǎng)關和 api 服務集群對于客戶端來說是黑盒
       * @return
       * @throws IOException
       */
      @Override
      public HttpStatus getStatusCode() throws IOException {
        return HttpStatus.OK;
      }

      @Override
      public int getRawStatusCode() throws IOException {
        return HttpStatus.OK.value();
      }

      @Override
      public String getStatusText() throws IOException {
        return HttpStatus.OK.getReasonPhrase();
      }

      @Override
      public void close() {

      }

      @Override
      public InputStream getBody() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> map = new HashMap<>();
        map.put("status", 200);
        map.put("message", "無法連接");
        return new ByteArrayInputStream(objectMapper.writeValueAsString(map).getBytes("UTF-8"));
      }

      @Override
      public HttpHeaders getHeaders() {
        HttpHeaders headers = new HttpHeaders();
        // 和 getBody 中的內(nèi)容編碼一致
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        return headers;
      }
    };
  }
}

測試路由訪問

依次運行 EurekaApplication > ServiceAdminApplication > WebAdminRibbonApplication > WebAdminFeignApplication > ZuulApplication 各服務

訪問:http://localhost:8769/api/ribbon/hi?message=zuul

瀏覽器顯示

port : 8763,message : zuul

訪問:http://localhost:8769/api/feign/hi?message=zuul

瀏覽器顯示

port : 8763,message : zuul

至此說明 Zuul 的路由功能配置成功。

使用 Zuul 的服務過濾功能

Zuul 不僅僅只是路由,還有很多強大的功能。比如用在安全驗證方面。

創(chuàng)建服務過濾器

/**
 * Zuul 的服務過濾演示
 */
@Component
public class LoginFilter extends ZuulFilter {

  private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);

  /**
   * 配置過濾類型,有四種不同生命周期的過濾器類型
   * 1. pre:路由之前
   * 2. routing:路由之時
   * 3. post:路由之后
   * 4. error:發(fā)送錯誤調(diào)用
   * @return
   */
  @Override
  public String filterType() {
    return "pre";
  }

  /**
   * 配置過濾的順序
   * @return
   */
  @Override
  public int filterOrder() {
    return 0;
  }

  /**
   * 配置是否需要過濾:true/需要,false/不需要
   * @return
   */
  @Override
  public boolean shouldFilter() {
    return true;
  }

  /**
   * 過濾器的具體業(yè)務代碼
   * @return
   * @throws ZuulException
   */
  @Override
  public Object run() throws ZuulException {
    RequestContext context = RequestContext.getCurrentContext();
    HttpServletRequest request = context.getRequest();
    String token = request.getParameter("token");
    if (token == null) {
      logger.warn("Token is empty");
      context.setSendZuulResponse(false);
      context.setResponseStatusCode(401);
      try {
        context.getResponse().getWriter().write("Token is empty");
      } catch (IOException e) {
      }
    } else {
      logger.info("OK");
    }
    return null;
  }
}

測試過濾器

訪問:http://localhost:8769/api/feign/hi?message=zuul

網(wǎng)頁顯示

Token is empty

訪問:http://localhost:8769/api/feign/hi?message=zuul&token=1

網(wǎng)頁顯示

port : 8763,message : zuul

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java實現(xiàn)刪除排序數(shù)組中重復元素的方法小結【三種方法比較】

    Java實現(xiàn)刪除排序數(shù)組中重復元素的方法小結【三種方法比較】

    這篇文章主要介紹了Java實現(xiàn)刪除排序數(shù)組中重復元素的方法,結合實例形式對比分析了三種常見的數(shù)組元素刪除算法操作技巧,需要的朋友可以參考下
    2019-02-02
  • spring boot配置多個請求服務代理的完整步驟

    spring boot配置多個請求服務代理的完整步驟

    這篇文章主要給大家介紹了關于spring boot配置多個請求服務代理的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • SpringBoot使用minio及配置代碼

    SpringBoot使用minio及配置代碼

    MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似?NodeJS,?Redis?或者?MySQL。本文重點給大家介紹SpringBoot使用minio及配置代碼,感興趣的朋友一起看看吧
    2022-02-02
  • SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點

    SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點

    本篇文章主要介紹了SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • springboot中使用@NotNull注解無效解決方法

    springboot中使用@NotNull注解無效解決方法

    這篇文章主要給大家介紹了關于springboot中使用@NotNull注解無效的解決方法,進行參數(shù)校驗的時候,加了@NotNull注解,@Validated注解和@Valid注解,但是參數(shù)校驗的時候不生效,需要的朋友可以參考下
    2023-08-08
  • Springboot?內(nèi)部服務調(diào)用方式

    Springboot?內(nèi)部服務調(diào)用方式

    這篇文章主要介紹了Springboot?內(nèi)部服務調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中輸入輸出方式的簡單示例

    Java中輸入輸出方式的簡單示例

    Java語言的輸入輸出功能是十分強大而靈活的,美中不足的是看上去輸入輸出的代碼并不是很簡潔,因為你往往需要包裝許多不同的對象,下面這篇文章主要給大家介紹了關于Java中輸入輸出方式的相關資料,需要的朋友可以參考下
    2021-08-08
  • java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例

    java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例

    這篇文章主要介紹了java基于雙向環(huán)形鏈表解決丟手帕問題的方法,簡單描述了丟手帕問題,并結合實例形式給出了Java基于雙向環(huán)形鏈表解決丟手帕問題的步驟與相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java垃圾回收機制的finalize方法實例分析

    Java垃圾回收機制的finalize方法實例分析

    這篇文章主要介紹了Java垃圾回收機制的finalize方法,結合實例形式分析了finalize方法的特點及在垃圾回收機制中的相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • Spring Boot 配置大全(小結)

    Spring Boot 配置大全(小結)

    本篇文章主要介紹了Spring Boot 配置大全(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論

涞水县| 合作市| 西乌| 壶关县| 司法| 崇礼县| 铁力市| 宣武区| 嘉义市| 大宁县| 丹巴县| 蒲城县| 禹城市| 湘潭县| 云安县| 宜章县| 隆安县| 正蓝旗| 内江市| 阿拉善左旗| 雷波县| 阿勒泰市| 扶风县| 余姚市| 元谋县| 常德市| 襄汾县| 漳浦县| 黑水县| 南平市| 岐山县| 宁河县| 苍溪县| 中卫市| 资溪县| 石泉县| 卢龙县| 徐水县| 鞍山市| 鹤岗市| 四平市|