微服务(SpringCloud)第二篇

本文介绍了SpringCloud中的网关服务,包括网关的概念、路由配置、登录校验过滤器的自定义实现、OpenFeign如何传递用户信息以及配置管理(如Nacos的配置共享和热更新)。后续会探讨更多Java技术及算法应用。
摘要由CSDN通过智能技术生成

作者简介:☕️大家好,我是intelligent_M,一个Java后端开发者!
当前专栏:intelligent_M—— 微服务(SpringCloud) ,CSDN博客。

后续会更新Java相关技术栈以及链表哈希表二叉树…,回溯算法贪心算法…等等算法题。
创作不易 欢迎点赞评论!!!


网关

  • 网关:就是网络的关口,负责数据的路由,转发,安全校验
    在这里插入图片描述

网关路由

在SpringCloud中网关的实现包括两种:

  • SpringCloud Gateway
    在这里插入图片描述
  • Netfilx Zuul
    在这里插入图片描述

快速入门

  • 网关是一个独立服务,因此入门案例中我们要做这么几件事情
  • 1.创建网关服务
    在这里插入图片描述
  • 2.引入依赖
    在这里插入图片描述
  • 3.编写启动类
    在这里插入图片描述
  • 4.配置路由
    在这里插入图片描述

在这里插入图片描述

路由断言

网关路由对应的Java类型是RouteDefinition,其中可配置的属性有:

  • id:路由唯一标示
  • uri:路由目的地,支持lb和http两种
  • predicates:路由断言,断言配置都有路由断言工厂(RoutePredicateFactory)来处理
  • filters:路由过滤器,处理请求或响应

Spring提供了12种基本的RoutePredicateFactory的默认实现:
在这里插入图片描述

网关登录校验

在这里插入图片描述

网关过滤器

在这里插入图片描述
-网关过滤器有两种,分别是:

  • GatewayFilter:路由过滤器,作用范围灵活,作用于任意指定的路由。
  • GlobalFilter:全局过滤器,作用范围是所有路由。
  • 两种过滤器的过滤方法签名完全一致
    在这里插入图片描述
    在这里插入图片描述
    Spring内置了很多GatewayFilter和GlobalFilter,其中Global Filter直接对所有请求生效,而Gateway则需要在yaml文件配置指定作用的路由范围。常见的GatewayFilter有:
    在这里插入图片描述

自定义过滤器

自定义GatewayFilter不是直接实现GatewayFilter,而是实现AbstractGatewayFilterFactory,如下:
在这里插入图片描述
在这里插入图片描述

自定义GlobaFilter就简单多了,直接实现GlobalFilter接口即可:
在这里插入图片描述

实现登录校验

  • 自定义GlobalFilter来完成登录校验
    在这里插入图片描述
    具体作用如下:

  • AuthProperties:配置登录校验需要拦截的路径,因为不是所有的路径都需要登录才能访问

  • JwtProperties:定义与JWT工具有关的属性,比如秘钥文件位置

  • SecurityConfig:工具的自动装配

  • JwtTool:JWT工具,其中包含了校验和解析token的功能

  • hmall.jks:秘钥文件

其中AuthPropertiesJwtProperties所需的属性要在application.yaml中配置:

hm:
  jwt:
    location: classpath:hmall.jks # 秘钥地址
    alias: hmall # 秘钥别名
    password: hmall123 # 秘钥文件密码
    tokenTTL: 30m # 登录有效期
  auth:
    excludePaths: # 无需登录校验的路径
      - /search/**
      - /users/login
      - /items/**
  • 定义一个登录校验的过滤器:
    在这里插入图片描述

网关传递用户

在这里插入图片描述

  • 在网关的登录校验过滤器中,把获取到的用户写入请求头
  • 修改gateway模块中的登录校验拦截器,在校验成功后保存到用户下游请求的请求头中。
    在这里插入图片描述
  • 在common中编写SpringMVC拦截器,获取登录用户
    在这里插入图片描述

OpenFeign传递用户

微服务项目中的很多业务要多个微服务共同合作完成,而这个过程中也需要传递登录用户信息,例如:
在这里插入图片描述

  • OpenFeign中提供了一个拦截器接口,所有由OpenFeign发送的请求都会先调用拦截器处理请求:
    在这里插入图片描述
  • 其中的RequestTemplate类中提供了一些方法可以让我们修改请求头:
    在这里插入图片描述在这里插入图片描述

配置管理

Nacos既可以做注册中心也可以做配置管理服务

  • 微服务重复配置过多,维护成本高
  • 业务配置经常变动,每次修改都要重启服务
  • 网关路由配置写死,如果变更要重启网关
    在这里插入图片描述

共享配置

  • 1.添加一些共享配置到Nacos中,包括:Jdbc,MybatisPlus,日志,Swagger,OpenFeign等配置
    在这里插入图片描述
  • 2.拉取共享配置,基于NacosConfig拉取共享配置代替微服务的本地配置。
    在这里插入图片描述
    • 1.引入依赖
      在这里插入图片描述
    • 2.新建bootstrap.yaml
      在这里插入图片描述

配置热更新

  • 除了Spring的配置以外,业务中自定义的基于@ConfigurationProperties的自定义配置属性也都可以从Nacos读取。而且当Nacos中的这些业务配置变更时,Nacos会推送变更信息到微服务,无需重启即可生效,实现配置热更新。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

动态路由

  • 动态路由一般是在网关服务的yaml文件中写死的,一般不需要动
    在这里插入图片描述
  • 实现动态路由需要将路由配置保存到Nacos,然后在网关监听Nacos中的路由配置,并实现配置热更新。然而网关路由并不是自定义业务配置属性,本身不具备热更新功能!参考CompositeRouteDefinitionLocator
    因此我们需要自己完成两件事情:
  • 1.监听Naocs配置变更的消息
  • 监听Nacos配置变更可以参考官方文档:https://nacos.io/zh-cn/docs/sdk.html
  • 2.当配置变更时,将最新的路由消息更新到网关路由表
    监听到路由信息后,可以里哟个来更新路由表
    在这里插入图片描述
    最终,我们要向Nacos中添加一个json格式的路由配置,模板如下:
    在这里插入图片描述

看完本篇请前往SpringCloud微服务第三篇

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Intelligent_M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值