中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

發布時間:2021-11-17 13:57:47 來源:億速云 閱讀:155 作者:iii 欄目:大數據

本篇內容主要講解“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”吧!

 1.1什么是Zuul

  • Zuul,是spring cloud 全家桶中的網關

  • 網關:程序統一入口。主要功能:服務分發(動態路由),服務鑒權 等。

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

1.2 快速入門--路由轉發

  • 需求

//已有訪問路徑
http://localhost:8080/user
//通過網關希望訪問路徑
http://localhost:10010/userservice/user
  • 步驟0:創建 zuul_demo

  • 步驟一:修改pom文件,添加 zuul 、測試 依賴

  • 步驟二:創建啟動類,添加 開啟網關代理 注解 @EnableZuulProxy

  • 步驟三:創建yml文件,配置端口、服務名、對應關系(訪問路徑 / 服務地址)

  • 步驟0:創建 zuul_demo

  • 步驟一:修改pom文件,添加 zuul 、測試 依賴

    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
        </dependencies>

     

  • 步驟二:創建啟動類,添加 開啟網關代理 注解 @EnableZuulProxy

    package com.czxy;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
    
    
    @SpringBootApplication
    @EnableZuulProxy        //開啟網關代理
    public class Zuul2Application {
        public static void main(String[] args) {
            SpringApplication.run(Zuul2Application.class,args);
        }
    }

     

  • 步驟三:創建yml文件,配置端口、服務名、對應關系(訪問路徑 / 服務地址)

    server:
      port: 10010
    spring:
      application:
        name: zuuldemo2
    #網關配置:訪問路徑 和 服務路徑 對應關系
    zuul:
      routes:
        userservice:
          path: /userservice/**       #訪問路徑
          url: http://localhost:8080  #服務路徑

     

1.3面向服務的路由

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

  • 步驟一:搭建eureka客戶端(pom依賴、啟動類注解、yml注冊地址)

    • pom依賴

      <!--添加eureka客戶端-->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
              </dependency>

       

    • 啟動類

      package com.czxy;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
      import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
      
      
      @SpringBootApplication
      @EnableZuulProxy        //開啟網關代理
      @EnableEurekaClient     //開啟eureka客服端
      public class Zuul2Application {
          public static void main(String[] args) {
              SpringApplication.run(Zuul2Application.class,args);
          }
      }

       

    • yml文件

      #注冊地址
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:10086/eureka


  • 步驟二:yml文件對應關系 (訪問路徑 和 服務名)

    #網關配置:訪問路徑 和 服務路徑 對應關系
    zuul:
      routes:
        userservice:
          path: /userservice/**       #訪問路徑
          #url: http://localhost:8080 #服務路徑
          serviceId: userservice    #服務名稱時

1.4 簡化路由配置

  • 路由名稱 和 服務名 通常采用一樣的命名,zuul允許簡化

zuul:
  routes:
    userservice: /userservice/**

1.5 默認路由規則

  • 默認情況下,一切服務的映射路徑就是服務名本身。

##默認配置
zuul:
  routes:
    adminservice: /adminservice/**

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

1.6 zuul基礎環境搭建

  • 步驟0:創建項目 zuul_demo

  • 步驟一:修改pom文件,添加 zuul依賴、eureka 客戶端依賴

       <dependencies>
            <!--網關依賴-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <!--添加eureka客戶端-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <!--測試-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
    
        </dependencies>


  • 步驟二:創建啟動類,添加2添加 開啟網關代理、開啟eureka客戶端

    • 開啟網關代理 @EnableZuulProxy

    • 開啟eureka客戶端 @EnableEurekaClient

      package com.czxy;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
      import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
      
      
      @SpringBootApplication
      @EnableZuulProxy        //開啟網關代理
      @EnableEurekaClient     //開啟eureka客服端
      public class Zuul2Application {
          public static void main(String[] args) {
              SpringApplication.run(Zuul2Application.class,args);
          }
      }


  • 步驟三:創建yml文件,配置端口號、服務名、注冊地址

    server:
      port: 10010
    spring:
      application:
        name: zuuldemo2
    #注冊地址
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:10086/eureka

1.7 路由前綴

  • 路由前綴:用于維護 版本號 或 項目名

  • 修改yml文件,進行配置

zuul:
  prefix: /api
  • 訪問

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

1.8 Zuul過濾器

1.8.1 概述

  • 編寫過濾器,繼承父類:ZuulFilter

  • 常見方法:

    • filterType() 過濾器類型,取值:"pre"

    • filterOrder() 過濾器順序,取值:1

    • shouldFilter() 是否執行,取值:true

    • run() 執行業務邏輯

1.8.2 自定義過濾器

  • 只要將過濾器的實現,添加到spring容器中,zuul將自動啟用過濾器。

    • 過濾器父類:ZuulFilter

    • 工具類(請求上下文對象):RequestContext

    • 特殊請求頭:Authorization(下圖是postman軟件)

      怎么使用Spring Cloud的Zuul網關和JWT身份驗證

package com.czxy.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;


@Component
public class LoginFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";            //1 過濾器類型
    }

    @Override
    public int filterOrder() {
        return 1;               //2 過濾器排序
    }

    @Override
    public boolean shouldFilter() {
        return true;           //3 是否執行
    }

    @Override
    public Object run() throws ZuulException {
        // 獲得一個特殊請求頭,判斷是否有值:有 返回 null(放行) , 沒有 響應狀態碼401
        //1 獲得工具類(請求上下文對象)
        RequestContext requestContext = RequestContext.getCurrentContext();
        //2 通過工具類獲得request對象
        HttpServletRequest request = requestContext.getRequest();
        //3 通過request對象獲得特殊請求頭
        String auth = request.getHeader("authorization");
        //4 判斷
        if(auth == null){
            //沒有
            requestContext.setSendZuulResponse(false);      //關閉響應
            requestContext.setResponseStatusCode(401);
        }

        //放行
        return null;
    }
}

1.9 Spring Cloud 總結

  • eureka :注冊中心

    • 服務端:提供注冊

    • 客戶端:進行注冊

  • ribbon:負載均衡(集群)

  • Hystrix:熔斷器,執行備選方案

  • Feign:遠程調用

  • Zuul:網關,統一入口。

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

2. JWT

服務與服務之間共享數據,采用JWT先生成數據,在另一個服務中解析數據,為了保證數據安全性,使用RAS對數據進行加密。

2.1 RAS 工具

  • RAS 非對稱加密算法

    • 同時生產一對秘鑰:公鑰和私鑰。

    • 公鑰秘鑰:用于加密

    • 私鑰秘鑰:用于解密

    • 特點

  • 編寫測試類使用工具生成公鑰,私鑰

//生成公鑰和私鑰
RasUtils.generateKey(公鑰位置,私鑰位置,密碼);
RasUtils.generateKey(pubKeyPath,priKeyPath,"234");
//獲得公鑰
RasUtils.getPublicKey(pubKeyPath);
//獲得私鑰
RasUtils.getPrivateKey(priKeyPath);

怎么使用Spring Cloud的Zuul網關和JWT身份驗證

2.2 JWT工具

  • JWT 基于JSON的認證規范。(Json Web Token)

  • 使用JWT目的:生成數據、解析數據

  • 使用JWT

    • 步驟一:添加依賴(含之前的)

      <properties>
              <jwt.jjwt.version>0.9.0</jwt.jjwt.version>
              <jwt.joda.version>2.9.7</jwt.joda.version>
              <lombok.version>1.16.20</lombok.version>
              <beanutils.version>1.9.3</beanutils.version>
          </properties>
      
      
          <dependencies>
              <!--網關依賴-->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
              </dependency>
              <!--添加eureka客戶端-->
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
              </dependency>
              <!--測試-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
              </dependency>
              <!--jwt依賴-->
              <dependency>
                  <groupId>commons-beanutils</groupId>
                  <artifactId>commons-beanutils</artifactId>
                  <version>${beanutils.version}</version>
              </dependency>
      
              <dependency>
                  <groupId>io.jsonwebtoken</groupId>
                  <artifactId>jjwt</artifactId>
                  <version>${jwt.jjwt.version}</version>
              </dependency>
      
              <dependency>
                  <groupId>joda-time</groupId>
                  <artifactId>joda-time</artifactId>
                  <version>${jwt.joda.version}</version>
              </dependency>
      
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <version>${lombok.version}</version>
                  <scope>provided</scope>
              </dependency>
      
      
          </dependencies>
    • 步驟二:導入工具

    • 步驟三:使用

      //生成數據, UserInfo --> String(加密)
      //JwtUtils.generateToken(數據,過期時間(分鐘), 私鑰)
      String token = JwtUtils.generateToken(userInfo,30, RasUtils.getPrivateKey(priKeyPath));
      
      //解析數據, String(加密) --> UserInfo
      // JwtUtils.getObjectFromToken(加密數據, 公鑰, 封裝對象.class);
      UserInfo userInfo = JwtUtils.getObjectFromToken(token, RasUtils.getPublicKey(pubKeyPath), UserInfo.class);

到此,相信大家對“怎么使用Spring Cloud的Zuul網關和JWT身份驗證”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳新县| 萍乡市| 平潭县| 祁连县| 南雄市| 岳阳县| 卢龙县| 麻阳| 伊宁县| 曲麻莱县| 大埔区| 耒阳市| 嵩明县| 河曲县| 涟水县| 崇州市| 惠东县| 深水埗区| 翼城县| 大庆市| 无棣县| 观塘区| 麦盖提县| 冷水江市| 雅安市| 伊通| 博野县| 井陉县| 宁波市| 新巴尔虎右旗| 兴业县| 沂源县| 罗甸县| 胶州市| 石林| 庆安县| 靖边县| 随州市| 沽源县| 北安市| 禹城市|