SpringCloudAlibaba(一)---Gateway+feign+nacos+jwt完成验证登录(配置+代码)

本文示例实现以gateway作为网关代理auth和user模块,在auth和user模块间使用feign实现远程服务调用。并在gateway的全局过滤器中使用 jwt 实现登录认证。

涉及到的知识点有: gateway、nacos、openfeig、 jwt权限认证、threadlocal

调用过程图如下:
在这里插入图片描述
因配置和代码篇幅太长,分为配置篇和代码篇,本篇为配置篇,代码篇更新完会放链接在此处,可以收藏一下,有问题的话也可以发私信,看到会回。

一、引入maven依赖

(1)parent 模块 pom.xml

<properties>
        <commons-lang3.version>3.7</commons-lang3.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.18.0</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <durid.version>1.1.9</durid.version>
        <mybatis.spring.boot.version>1.3.2</mybatis.spring.boot.version>
        <swagger.version>2.9.2</swagger.version>
        <fastjson.version>1.2.47</fastjson.version>
        <se_jwt.version>1.0.9.RELEASE</se_jwt.version>
        <jjwt.version>0.9.0</jjwt.version>
        <pagehelper.version>1.2.5</pagehelper.version>
</properties>


<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
      <!--   nacos发现的依赖      -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos 作为配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
      <!-- mysql8 的 依赖       -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <!--  openfeign 依赖       -->
        <dependency>
            <!--父POM中锁定了版本信息,只需引入G,A即可 -->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    <!--       mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>


<!--  dependencyManagement作为父模块 版本控制  -->
    <dependencyManagement>
     <dependencies>
        <!-- spring-cloud 相关依赖  openfeign 要用到-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--  springboot 2.2.2    -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--  spring cloud alibaba 2.1.0.RELEASE    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId> spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
             <version>${durid.version}</version>
         </dependency>

         <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>

         <!--jwt-->
         <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-jwt</artifactId>
             <version>${se_jwt.version}</version>
         </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt</artifactId>
             <version>${jjwt.version}</version>
         </dependency>

         <!-- springboot 整合 pagehelper -->
         <dependency>
             <groupId>com.github.pagehelper</groupId>
             <artifactId>pagehelper-spring-boot-starter</artifactId>
             <version>${pagehelper.version}</version>
         </dependency>
     </dependencies>
    </dependencyManagement>

(2)gateway模块pom.xml (不可引入spring-starter-web 的依赖)


<dependencies>
      <!--   添加gateway的依赖-->
     <!--    springcloudgateway的内部是通过netty+webflux实现的,webflux实现和springmvc配置依赖冲突。所以gateway模块 千万不能引入 spring的web starter       -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--    用于整合 openfeign -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

     <!--  jwt 依赖      -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>${se_jwt.version}</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

(3)auth模块 pom.xml

<dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
            <artifactId>cloud-api-9002</artifactId>
        </dependency>

     <!--   <dependency>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
            <artifactId>cloud-common-9007</artifactId>
        </dependency> -->

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
            <!--nacos 作为配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <!--   mysql 作为数据库连接依赖     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

        <!--jwt-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>${se_jwt.version}</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>${poi.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

(4)user模块 pom.xml

<!--        存放openfeign接口和model-->
        <dependency>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
            <artifactId>cloud-api-9002</artifactId>
        </dependency> 
       <!-- 该模块主要做一些工具类       -->
       <!-- <dependency>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
            <artifactId>cloud-common-9007</artifactId>
        </dependency> -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
            <!--nacos 作为配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <!--   mysql 作为数据库连接依赖     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

<!--   druid 数据源  -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${durid.version}</version>
        </dependency>

        <!--jwt-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>${se_jwt.version}</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>${poi.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

(5)Api 模块的 pom.xml 配置


 <dependencies>
       <!--  <dependency>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
            <artifactId>cloud-common-9007</artifactId>
        </dependency>
         -->  
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos 作为配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <dependency>
            <!--父POM中锁定了版本信息,只需引入G,A即可 -->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--        用于整合 openfeign -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

二、application/bootstrap.yml 配置

(1) Gateway 的 bootstarp.yml 配置


server:
  port: 9001
  servlet:
    context-path: /gateway

spring:
  application:
    name: cloud-gateway
  cloud:
    #gateway的配置
    gateway:
      #路由配置规则
      routes:
        - id: user_route #路由的唯一标识
          uri: http://127.0.0.1:9003 #需要转发的地址 配置了nacos 也可用 lb:服务名实现负载
          #断言规则 用于路由配置规则
          #让 http://localhost:9001/user/*** 路由到  http://localhost:9003/user/***
          #配置过滤器规则
          predicates:
            - Path=/user/**
#          filters:
#            - StripPrefix=1 #配置该参数是去掉 /user 让 http://localhost:9003/user/*** 变为 http://localhost:9003/***  我自己的服务user模块配置了servlet.context-path为user 可以不配
        - id: auth_route
          uri: http://127.0.0.1:9006 
          predicates:
           - Path=/auth/**
    #nacos的配置
    nacos:
      discovery:
        server-addr: nacos的ip:nacos的端口  #nacos 作为注册中心 如果这里配置了 nacos集群  就填写 nginx代理地址
      config:
        server-addr: nacos的ip:nacos的端口 #nacos 作为配置中心
        file-extension: yaml #指定为yaml 格式



(2) Auth 模块的 bootstarp.yml 配置

server:
  port: 9006
  servlet:
    context-path: /auth

spring:
  application:
    name: cloud-auth
  cloud:
    nacos:
      discovery:
        server-addr: nacos的ip:nacos的端口  #nacos 作为注册中心    配置nacos集群  nginx代理地址
      config:
        server-addr: nacos的ip:nacos的端口 #nacos 作为配置中心
        file-extension: yaml #指定为yaml 格式

(3) User 模块的 bootstarp.yml 配置

server:
  port: 9003
  servlet:
    context-path: /user
#配置druid作为数据源
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://数据库ip:数据库端口/数据库名
    username: 账号
    password: 密码
    
spring:
  application:
    name: cloud-user
    nacos:
      discovery:
        server-addr: nacos的ip:nacos的端口  #nacos 作为注册中心    配置nacos集群  nginx代理地址
      config:
        server-addr: nacos的ip:nacos的端口 #nacos 作为配置中心
        file-extension: yaml #指定为yaml 格式
 

(4) Api模块的bootstarp.yml 配置

server:
  port: 9002
  servlet:
    context-path: /api

#nacos sentinel 等配置
spring:
  application:
    name: cloud-api
  cloud:
    nacos:
      discovery:
        server-addr: nacos的ip:nacos的端口  #nacos 作为注册中心    配置nacos集群  nginx代理地址
      config:
        server-addr: nacos的ip:nacos的端口 #nacos 作为配置中心
        file-extension: yaml #指定为yaml 格式
        
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值