Spring Cloud【分布式配置中心(Spring Cloud Config 、Config配置总控中心搭建、Config配置读取规则)】(九)

news2024/11/28 10:44:52

 

目录

服务网关Gateway实现用户鉴权_网关全局过滤器加入JWT 鉴权

分布式配置中心_Spring Cloud Config 

分布式配置中心_Config配置总控中心搭建

分布式配置中心_Config配置读取规则


 

服务网关Gateway实现用户鉴权_网关全局过滤器加入JWT 鉴权

配置跳过验证路由 

org:
 my:
   jwt:
      #跳过认证的路由
     skipAuthUrls:
         - /user/login

创建LoginGlobalFilter全局过滤器

@Data
@Slf4j
@Component
@ConfigurationProperties("org.my.jwt")
public class LoginGlobalFilter  implements
GlobalFilter, Ordered {
    // 跳过路由数组
    private String[] skipAuthUrls;
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获取请求url地址
        String url = exchange.getRequest().getURI().getPath();
        //跳过不需要验证的路径
        if (null != skipAuthUrls && isSkipUrl(url)) {
            return chain.filter(exchange);
       }
        //从请求头中取得token
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        if (StringUtils.isEmpty(token)) {
            return createResponseObj(exchange,500,"token参数缺失");
       }
        //请求中的token是否有效
        boolean verifyResult = JWTUtil.verify(token);
        if (!verifyResult) {
            return createResponseObj(exchange,500,"token 失效");
       }
        //如果各种判断都通过,执行chain上的其他业务逻辑
        return chain.filter(exchange);
   }
    @Override
    public int getOrder() {
        return 0;
   }
    /**
     * 判断当前访问的url是否开头URI是在配置的忽略url列表中
     *
     * @param url
     * @return
     */
    public boolean isSkipUrl(String url) {
        for (String skipAuthUrl : skipAuthUrls) {
            if (url.startsWith(skipAuthUrl))
            {
                return true;
           }
       }
        return false;
   }
    // 组装返回数据
    private Mono<Void> createResponseObj(ServerWebExchange exchange,Integer code,String message){
        ServerHttpResponse response = exchange.getResponse();
        // 设置响应状态码200
        response.setStatusCode(HttpStatus.OK);
        // 设置响应头
        response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        // 创建响应对象
        Response res = new Response(code, message);
        // 把对象转成字符串
        byte[] responseByte = JSONObject.toJSONString(res).toString().getBytes(StandardCharsets.UTF_8);
        DataBuffer buffer = response.bufferFactory().wrap(responseByte);
        return response.writeWith(Flux.just(buffer));
   }
}

测试

分布式配置中心_Spring Cloud Config 

分布式系统面临问题 

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一 管理,实时更新,所以需要分布式配置中心组件。

什么是Spring Cloud Config 

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。

 整个结构包括三个部分,客户端(各个微服务应用),服务端 (中介者),配置仓库(可以是本地文件系统或者远端仓库, 包括git,svn等)。

1、配置仓库中放置各个配置文件(.yml 或者.properties)

2、服务端指定配置文件存放的位置

3、客户端指定配置文件的名称

Config能干什么

1、提供服务端和客户端支持

2、集中管理各环境的配置文件

3、配置文件修改之后,可以快速的生效

4、可以进行版本管理

5、支持大的并发查询

6、支持各种语言 

对比主流配置中心 

开源的配置中心有很多,比如,360的QConf、淘宝的 nacos、携程的Apollo等。在Spring Cloud中,有分布式配置中心组件spring cloud config,它功能全面、强大,可以无缝地和Spring体系相结合,使用方便简单。

实时效果反馈

1.Spring Cloud Config项目是一个解决分布式系统的__问题。

A 服务注册发现

B 负载均衡

C 服务熔断

D 配置管理

2.Spring Cloud Config项目包含了____和____两个部分。

A client,service

B client,server

C master,slave

D 以上都错误 

分布式配置中心_Config配置总控中心搭建

服务端开发 

服务端开发最主要的任务是配置从哪里读取对应的配置文件,我们将配置从Git仓库读取配置文件。

在码云新建一个名为springcloud-config的新的仓库

 

项目开源 

新建模块cloud-config-server3344 

仓库中新建3个文件 

config-dev.yml

config:
 info: "master branch,config-dev.yml
version=1"

config-test.yml

config:
 info: "master branch,config-test.yml
version=1"

config-prod.yml

config:
 info: "master branch,config-prod.yml
version=1"

POM文件引入依赖

   <dependencies>
        <!-- 引入Eureka client依赖   -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- 引入 config 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- 引入 web 依赖-->
        <dependency>          
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
    </dependencies>

编写YML文件

新增application.yml

server:
 port: 3344
spring:
 application:
   name: cloud-config-center
 cloud:
   config:
     server:
       git:
         uri: https://gitee.com/WCCRegistered/cloud-config.git
         search-paths:
           - cloud-config
     label: master
eureka:
 client:
    # 表示是否将自己注册到Eureka Server
   register-with-eureka: true
    # 示是否从Eureka Server获取注册的服务信息
   fetch-registry: true
    # Eureka Server地址
   service-url:
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
 instance:
   instance-id: cloud-config-center
   prefer-ip-address: true

编写主启动类

package com.tong;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* 主启动类
*/
@Slf4j
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
    public static void main(String[] args) {
      SpringApplication.run(ConfigCenterMain3344.class,args);
        log.info("*********** 配置中心服务启动成功 *************");
   }
}

测试通过config微服务是否可以从码云上获取配置

http://locahost:3344/master/config-dev.yml

实时效果反馈

1.Spring Cloud Config项目配置具体存放在____。

A redis

B mysql

C git

D svn 

分布式配置中心_Config配置读取规则

Config支持的请求的参数规则

1、/{application}/{profile}[/{label}]

2、/{application}-{profile}.yml

3、/{label}/{application}-{profile}.yml

4、/{application}-{profile}.properties

5、/{label}/{application}-{profile}.properties 

 

注意:

1、{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面 创建的配置文件。

2、{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、 application-test.yml、application-prod.yml。

3、{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可 以通过不同的 label 来控制访问不同的配置文件了。 

最推荐使用方式

/ { 分支名 } / { 应用名 } - { 环境名 }.yml 

实时效果反馈

1.Spring Cloud Config客户端在指定配置文件时profile表示__含 义。

A 应用名称

B 配置文件的版本

C git 分支

D 以上都是错误

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++笔记之函数对象functors与可调用对象

C笔记之函数对象functors与可调用对象 code review! 文章目录 C笔记之函数对象functors与可调用对象0.函数对象&#xff08;Function Objects&#xff09;&#xff0c;也称为functors1.函数对象与可调用对象的关系2.可调用对象几种形式2.1. 使用函数对象2.2. 使用普通函数指针…

Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录

Linux 环境下Qt开发的摄像头程序用到了opencv的库&#xff0c;需要跟Qt环境一起打包。 1.打包所有关联库用的是脚本程序。 #!/bin/bashLibDir$PWD"/lib" Target$1lib_array($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))$(m…

谈谈跨域?!

1.什么是跨域 跨域是一个网页脚本访问另外一个网页的内容&#xff0c;如果这两个网页的协议、端口&#xff0c;域名有一个不同就会产生跨域问题&#xff0c;浏览器具有一个同源策略&#xff0c;是一个安全策略&#xff0c;为了避免被恶意修改数据或者操作dom。 2.如何解决跨域…

为什么学习SpringSpring框架核心与设计思想(IOC与DI)?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 目录 文章目录 一、Spring是什么&#xff1f; 二、为什么要学习框架&#xff1f; 三、Spring核心概念 3.1 什么是容器&#xff1f; 3.2 什么是IOC&#xff1f; 四、再谈Spring中的 IOC 五…

高阶SQL语句

创建一个表一、按关键字排序1.1 单字段排序1.1.1 按分数排序&#xff0c;默认不指定是升序排列1.1.2 分数按降序排列1.1.3 结合where进行条件过滤&#xff0c;筛选地址是nanjing的学生按分数升序排列 1.2 多字段排序1.2.1 查询学生信息先按兴趣id降序排列&#xff0c;相同分数的…

C# List 详解三

目录 11.Equals(Object) 12.Exists(Predicate) 13.Find(Predicate) 14.FindAll(Predicate) 15.FindIndex(Int32, Int32, Predicate) 16.FindIndex(Int32, Predicate) 17.FindIndex(Predicate) C# List 详解一 1.Add(T)&#xff0c;2.AddRa…

信息管理系统---Servlet+javaBean+Druid+DButil

这里是学习了Servlet后结合数据库进行增删查改–登录等作为练手项目非常适合 准备工作&#xff1a; 1.数据准备 这张表是用户表&#xff0c;用于登录 CREATE TABLE users (id int NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,password varchar(20) DEFAULT…

【C++基础(四)】内联函数和auto关键字

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 内联函数 1. 前言2. 内联函数概念3. 内联函数的特性…

数字IC实践项目(7)—CNN加速器的设计和实现(付费项目)

数字IC实践项目&#xff08;7&#xff09;—基于Verilog的CNN加速器&#xff08;付费项目&#xff09; 写在前面的话项目整体框图神经网络框图完整电路框图 项目简介和学习目的软件环境要求 资源占用&板载功耗总结 写在前面的话 项目介绍&#xff1a; 卷积神经网络硬件加速…

基于深度学习的高精度六类海船检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度六类海船检测识别系统可用于日常生活中检测与定位海船目标&#xff08;散装货船&#xff08;bulk cargo carrier&#xff09;、集装箱船&#xff08;container ship&#xff09;、渔船&#xff08;fishing boat&#xff09;、普通货船&…

[golang gin框架] 41.Gin商城项目-微服务实战之后台Rbac微服务(用户登录 、Gorm数据库配置单独抽离、 Consul配置单独抽离)

上一节抽离了captcha验证码功能,集成了验证码微服务功能,这一节来看看后台Rbac功能,并抽离其中的用户登录,管理员管理,角色管理,权限管理等功能作为微服务来调用 一.引入 后台操作从登录到后台首页,然后其中的管理员管理,角色管理,权限管理等功能可以抽离出来作为 一个Rbac微服…

视频画面尺寸怎么裁剪?裁剪视频画面方法分享

如果我们的视频将在不同的平台或设备上播放&#xff0c;而这些设备具有不同的屏幕比例&#xff08;如16:9、4:3、1:1等&#xff09;&#xff0c;则可能需要裁剪来适应目标屏幕。这样观看起来会体验效果更佳&#xff0c;但是该怎么裁剪视频的画面呢&#xff1f;给大家分享几种裁…

力扣热门100题之最长连续序列【中等】

题目描述 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&…

Kotlin多平台最佳架构指南

在这篇文章中&#xff0c;我们将对 Kotlin 多平台移动端的最佳架构进行深入探讨。在2023年&#xff0c;作为 Android 开发者&#xff0c;我们会倾向于采用 MVVM 架构&#xff0c;因为它简单、灵活且易于测试。而作为 iOS 开发者&#xff0c;我们可能会选择 MVC、Viper 等架构。…

解决FLink:Missing required options are: slot.name

[ERROR] Could not execute SQL statement. Reason: org.apache.flink.table.api.ValidationException: One or more required options are missing.Missing required options are:slot.name解决 https://ververica.github.io/flink-cdc-connectors/release-2.4/content/connec…

JSR 规范详解和概述

JSR 规范详解 目录概述需求&#xff1a; 设计思路实现思路分析1.JSR 规范详解 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge …

Python计算特征值与特征向量案例+传统方法+雅可比Jacobi迭代法

目录 {1}几个例子&#x1f330; {2}特征值 {3}奇异矩阵 {4}特征向量 {5}特征值和特征向量的计算方法 特征值性质 特征向量性质 {6}巩固练习 {7}迭代法 什么时候收敛&#xff1f;收敛速度如何&#xff1f; {8}雅可比迭代法 {1}几个例子&#x1f330; 例1&#xff…

Moshi Vs Gson Vs Kotlin Serialisation性能PK

Moshi Vs Gson Vs Kotlin Serialisation 定义 Gson Gson 是一个Java序列化/反序列化库&#xff0c;用于将Java对象转换为JSON格式&#xff0c;以及将JSON格式转换回Java对象。 Moshi Moshi 是一个现代化的JSON库&#xff0c;适用于Android和Java。它使得将JSON解析为Java对…

Django基本数据库操作

Django基本数据库操作 文章目录 Django基本数据库操作&#x1f468;‍&#x1f3eb;内容一&#xff1a;基本数据库配置&#x1f468;‍&#x1f52c;内容二&#xff1a;ORM基本操作 &#x1f468;‍&#x1f3eb;内容一&#xff1a;基本数据库配置 &#x1f449;Django是一个流…

整车总线系列——FlexRay 四

整车总线系列——FlexRay 四 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能…