<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      云間錄  

      Zuul路由網關簡介及基本使用

      Zuul API路由網關服務簡介

      如圖:這里的API 路由網關服務 由Zuul實現,主要就是對外提供服務接口的時候,起到了請求的路由和過濾作用,也因此能夠隱藏內部服務的接口細節,從來有利于保護系統的安全性

      路由配置

      Zuul 路由配置

      我們新建一個module  microservice-zuul-3001

      這里我們的zuul也注冊到eureka服務里,端口3001;

      我們修改下Hosts,專門為zuul搞個本地域名映射 

      hosts文件 加下:

      127.0.0.1  zuul.lingerqi.com

      pom依賴:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <parent>
              <artifactId>testSpringcloud</artifactId>
              <groupId>com.lingerqi</groupId>
              <version>1.0-SNAPSHOT</version>
          </parent>
          <modelVersion>4.0.0</modelVersion>
      
          <artifactId>microservice-zuul-3001</artifactId>
          <properties>
              <java.version>1.8</java.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>com.lingerqi</groupId>
                  <artifactId>microservice-common</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-eureka</artifactId>
              </dependency>
              <!-- actuator監控 -->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-actuator</artifactId>
              </dependency>
              <!-- hystrix容錯 -->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-hystrix</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-config</artifactId>
              </dependency>
              <!--zuul網關-->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-zuul</artifactId>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      </project>
      

        修改application.yml:

      server:
        port: 3001
        context-path: /
      spring:
        application:
          name: microservice-zuul
      eureka:
        instance:
          instance-id: microservice-zuul:3001
          prefer-ip-address: true
        client:
          service-url:
            defaultZone: http://eureka2001.lingerqi.com:2001/eureka/,http://eureka2002.lingerqi.com:2002/eureka/,http://eureka2003.lingerqi.com:2003/eureka/
      info:
        groupId: com.lingerqi.testSpringcloud
        artifactId: microservice-zuul-3001
        version: 1.0-SNAPSHOT
        userName: http://lingerqi.com
        phone: 123456
      

        啟動類加注解:

      @SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
      @EnableZuulProxy
      

        測試:

      啟動三個eureka 然后再啟動下一個1001服務,以及 zuul網關服務;

       

       

      我們直接請求:http://localhost:1001/student/list 能獲取到數據;

      我們用 http://zuul.lingerqi.com:3001/microservice-student/student/list  域名+端口+服務名稱+請求地址 也能請求到數據;

      說明我們的路由配置基本OK

      Zuul路由映射配置

      上面是zuul的簡單使用,從接口地址很輕易的就暴露了服務提供者的唯一標識名microservice-student;有安全風險,我們需要將其隱藏;

      ignored-services的作用是將原來的服務提供者唯一標識名禁用;

      Prefix的作用是給服務加前綴

      yml文件中添加以下配置:

      zuul:
        routes:
          studentServer.serviceId: microservice-student
          studentServer.path: /studentServer/**
        ignored-services: "*"
        prefix: /lingerqi
      

        

      對應的配置會出現下面的錯誤頁面,這是正常現象。

      配置完畢后可通過以下鏈接做測試

      http://zuul.lingerqi.com:3001/microservice-student/student/list

      http://zuul.lingerqi.com:3001/studentServer/student/list

      http://zuul.lingerqi.com:3001/lingerqi/microservice-student/student/list

      http://zuul.lingerqi.com:3001/lingerqi/studentServer/student/list

       

      Zuul請求過濾配置

       

      比如我們登錄某個系統 需要身份驗證,用戶名密碼啥的;

       

      我們請求服務,也可以來設置身份驗證,也就是過濾非法請求;Zuul通過ZuulFilter過濾器實現;

       

      一般具體實現的話 每次經過Zuul服務網關 我們都對帶來的token進行有效性驗證;

       

       

      我們先定義一個 AccessFilter類:

      package com.lingerqi.microservicezuul3001.filter;
      
      import com.netflix.zuul.ZuulFilter;
      import com.netflix.zuul.context.RequestContext;
      import com.netflix.zuul.exception.ZuulException;
      import org.apache.log4j.Logger;
      
      import javax.servlet.http.HttpServletRequest;
      
      /**
       * @author xyls
       * @blog name & blog address 027@0030
       * @create  2019-12-05 15:40
       */
      
      public class AccessFilter extends ZuulFilter {
      
          Logger logger=Logger.getLogger(AccessFilter.class);
      
          /**
           * 判斷該過濾器是否要被執行
           */
          @Override
          public boolean shouldFilter() {
              return true;
          }
      
          /**
           * 過濾器的具體執行邏輯
           */
          @Override
          public Object run() throws ZuulException {
              RequestContext ctx = RequestContext.getCurrentContext();
              HttpServletRequest request = ctx.getRequest();
              String parameter = request.getParameter("accessToken");
              logger.info(request.getRequestURL().toString()+" 請求訪問");
              if(parameter==null){
                  logger.error("accessToken為空!");
                  ctx.setSendZuulResponse(false);
                  ctx.setResponseStatusCode(401);
                  ctx.setResponseBody("{\"result\":\"accessToken is empty!\"}");
                  return null;
              }
              //  token判斷邏輯
              logger.info(request.getRequestURL().toString()+" 請求成功");
              return null;
          }
      
          /**
           * 過濾器的類型 這里用pre,代表會再請求被路由之前執行
           */
          @Override
          public String filterType() {
              return "pre";
          }
      
          /**
           * 過濾器的執行順序
           */
          @Override
          public int filterOrder() {
              return 0;
          }
      
      }

      然后再開啟下 Filter配置:

      package com.lingerqi.microservicezuul3001.config;
      
      import com.lingerqi.microservicezuul3001.filter.AccessFilter;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class ZuulConfig {
      
          @Bean
          public AccessFilter accessFilter(){
              return new AccessFilter();
          }
      }
      

        

      Zuul作為服務網關為了保證自己不被服務拖垮,本身已經集成了Hystrix對路由轉發進行隔離。 為了方便開發人員對服務短路進行自定義處理,

      ZuulFallbackProvider :Zuul 提供了 ZuulFallbackProvider 接口,開發人員可以通過實現該接口來完成自定義Hystrix Fallback
      FallbackProvider :Spring Cloud Zuul 提供了 FallbackProvider替代了ZuulFallbackProvider接口。

      package com.javaxl.microservicezuul3001.fallback;
      
      import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
      import org.springframework.http.HttpHeaders;
      import org.springframework.http.HttpStatus;
      import org.springframework.http.MediaType;
      import org.springframework.http.client.ClientHttpResponse;
      import org.springframework.stereotype.Component;
      
      import java.io.ByteArrayInputStream;
      import java.io.IOException;
      import java.io.InputStream;
      
      @Component
      public class ZuulFallBack implements ZuulFallbackProvider {
      
          @Override
          public String getRoute() {
              return "*";
          }
      
          /**
           * 在給zuul整合回退功能時,只要類實現ZuulFallbackProvider接口,并且注冊bean即可。
           *
           * 不過需要注意的時,這個回退只有服務掉線或者超時的情況下才會觸發(Camden.SR4版本測試是這樣),
           * 如果服務程序出現異常,此回退程序是不能處理的,異常會直接返回給調用者,比如頁面。
           *
           * @return
           */
          @Override
          public ClientHttpResponse fallbackResponse() {
              return new ClientHttpResponse() {
                  @Override
                  public HttpHeaders getHeaders() {
                      HttpHeaders headers = new HttpHeaders();
                      headers.setContentType(MediaType.APPLICATION_JSON_UTF8);//application/json;charset=UTF-8
                      return headers;
                  }
      
                  @Override
                  public InputStream getBody() throws IOException {
                      String msg = "服務繁忙,請稍后.....";
                      //new ByteArrayInputStream("{\"code\":-1,\"msg\":\"服務暫不可用\"}".getBytes(StandardCharsets.UTF_8))
                      return new ByteArrayInputStream(msg.getBytes());
                  }
      
                  @Override
                  public String getStatusText() throws IOException {
                      return HttpStatus.BAD_REQUEST.getReasonPhrase();//400
                  }
      
                  @Override
                  public HttpStatus getStatusCode() throws IOException {
                      return HttpStatus.BAD_REQUEST;
                  }
      
                  @Override
                  public int getRawStatusCode() throws IOException {
                      return HttpStatus.BAD_REQUEST.value();//"Bad Request"
                  }
      
                  @Override
                  public void close() {
      
                  }
              };
          }
      }

      瀏覽器輸入地址進行測試

      http://zuul.lingerqi.com:3001/lingerqi/studentServer/student/list

      http://zuul.lingerqi.com:3001/lingerqi/studentServer/student/list?accessToken=1

      測試結果如下:

       

       

       

       

       

       

      posted on 2019-12-13 17:20  云間錄  閱讀(183)  評論(0)    收藏  舉報
       
      主站蜘蛛池模板: 巨胸喷奶水视频www免费网站| 福利一区二区不卡国产| 蜜臀久久99精品久久久久久| 亚洲一本大道在线| 久久成人成狠狠爱综合网| 色综合亚洲一区二区小说| 绍兴县| 久久精品国产99国产精品亚洲| 日韩乱码视频一区二区三区| 色视频在线观看免费视频| 一本色道久久东京热| 国产精品免费无遮挡无码永久视频| 深夜av免费在线观看| 男女18禁啪啪无遮挡激烈网站| 国产一区二区三区精品综合| 国产欧亚州美日韩综合区| 国产乱女乱子视频在线播放| 亚洲av永久无码精品网站| 国产精品女生自拍第一区| 中国女人熟毛茸茸A毛片| 丰满熟妇人妻av无码区| 一区二区三区四区高清自拍| 中文字幕日韩有码av| √8天堂资源地址中文在线| 美女一区二区三区在线观看视频 | 人妻少妇精品视频专区| 天天躁日日躁狠狠躁中文字幕| 日本高清在线观看WWW色| 一本色道久久综合亚洲精品| 国产精品va在线观看h| 亚洲国产成人午夜在线一区| 99久久国产综合精品成人影院| 中文字幕日韩有码国产| 亚洲 日韩 国产 制服 在线| 亚洲码和欧洲码一二三四| 欧美和黑人xxxx猛交视频| 激情综合色综合久久丁香| 欧美黑人大战白嫩在线| 南平市| 无码av岛国片在线播放| 日本怡春院一区二区三区|