pig 权限管理开源项目学习

news2025/4/15 6:42:29

pig 源码 https://github.com/pig-mesh/pig

文档在其中,前端在文档中,官方视频教学也在文档中有。

第一次搭建,建议直接去看单体视频,照着做即可,需 mysql,redis 基础。

文章目录

  • 项目结构
      • Maven 多模块项目
      • pig-boot 启动核心模块
      • 总 profile
      • pig-auth 实现认证和授权
      • pig-gateway API 网关
        • Nacos
        • 启动 Nacos
      • Spring Cloud
        • Spring Cloud Gateway
      • pig-upms 核心业务
  • 项目交互细节
      • 验证码

项目结构

这是典型的 Spring Boot 微服务项目
在这里插入图片描述

  • auth : authentication 身份验证
  • common 公共的、通用的
  • gateway 网关
  • upms : user permission management system 用户权限管理系统
  • visual : visualization 可视化
  • pom : project object model , Maven的项目对象模型

Maven 多模块项目

聚合项目(Aggregator Project)指的是一个 父项目(Parent POM),它不包含实际代码,只是统一管理多个子模块(Submodule)

pig/pom.xml 聚合

明确聚合的子模块:

<modules>
    <module>pig-register</module>
    <module>pig-gateway</module>
    <module>pig-auth</module>
    <module>pig-upms</module>
    <module>pig-common</module>
    <module>pig-visual</module>
</modules>

<dependencyManagement> 统一管理依赖版本

pluginManagement 统一插件版本

profiles 支持不同构建环境
这里就对应 idea 右边 maven 里的 profiles

<!--  -->
 <profiles>
        <profile> <!-- 代表一个特定的构建配置集合 -->
        
            <id>cloud</id> <!-- 唯一标识符 -->
            <properties> <!-- 定义一组属性 -->
                <!-- 环境标识,需要与配置文件的名称相对应 -->             
                <profiles.active>dev</profiles.active> <!-- 当前激活的环境为 dev -->
                
				<!-- 设置 Nacos 注册中心的用户名和密码 -->
                <nacos.username>nacos</nacos.username> 
                <nacos.password>nacos</nacos.password>
            </properties>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        
        <profile>
            <id>boot</id>
            <modules> <!-- 激活时要包含的模块 -->
                <module>pig-boot</module>
            </modules>
        </profile>

pig-boot 启动核心模块

SpringBootApplication 注解是 
@Configuration // ※ 使 spring boot 默认扫描其上级和同级的子包
@EnableAutoConfiguration
@ComponentScan 
的组合。

项目结构是一个 多模块 Maven 工程

pig/pom.xml中,已经把子模块都聚合进来了(见上文):
在这里插入图片描述

而 @ComponentScan 默认就是从 com.pig.boot 扫描其“上级和同级的子包” (这里是 com.pig4cloud.pig )

因此只要它们的包路径是 com.pig 开头,Spring Boot 默认就能扫描到!

总 profile

Spring Boot 会加载所有依赖模块中的 resources 目录下的配置文件,合并成一个配置环境,再根据 spring.profiles.active 去选择性加载 profile 文件。

无论模块是 pig-boot、pig-gateway 还是别的,只要这个模块是当前应用启动时依赖的模块,并且里面有resources/application.yml(或 .properties),Spring Boot 就会统一加载。

如果有多个模块都有 application.yml,Spring Boot 会合并它们的配置(后加载的覆盖前面的,或者由 @Order、@PropertySource 等控制顺序)。

在这里插入图片描述

pig-auth 实现认证和授权

使用了 Spring Security 和 OAuth2

pig-gateway API 网关

过滤器会对路径进行修改,从而转发到对应的微服务:
在这里插入图片描述

路由配置 resources/application.yml:

在这里插入图片描述
配置了服务器端口,而网关信息由 Nacos 读入

.yaml 文件,一种数据序列化格式
阅读提示:
下面的 server: port: 等价于 server.port

server:
  port: 9999  # 服务器端口号

spring:
  application:
    name: @artifactId@ # 应用名称,会被替换为pig/pom.xml的同名标记
  cloud:
    nacos:
      username: @nacos.username@
      password: @nacos.password@
      discovery:
        server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848} # 配置 Nacos 服务发现的服务器地址
        watch:
          enabled: true # 启用服务发现的监听
        watch-delay: 1000 # 监听的延迟时间ms
      config: # 配置 Nacos 作为配置中心的服务器地址
        server-addr: ${spring.cloud.nacos.discovery.server-addr} # . 即 :
  config:
    import: ## Spring 应用从 Nacos 配置中心导入配置文件 ##
      - optional:nacos:application-@profiles.active@.yml
      - optional:nacos:${spring.application.name}-@profiles.active@.yml

Nacos

Naming and Configuration Service

一个服务发现和配置管理的平台

  • 集中管理微服务的配置信息,无需重启应用即可使配置生效
  • 允许微服务在 Nacos 中进行注册,其他服务可以通过 Nacos 发现并获取到这些已注册服务的实例信息,从而实现服务间的调用
启动 Nacos

在这里插入图片描述

阅读 pig-gateway 的配置文件:

pig-gateway-dev.yml

在这里插入图片描述

spring:
  cloud:
    gateway:
      locator:
        enabled: true
      routes:
        # 认证中心
        - id: pig-auth
          uri: lb://pig-auth
          predicates:
            - Path=/auth/**
        #UPMS 模块
        - id: pig-upms-biz
          uri: lb://pig-upms-biz
          predicates:
            - Path=/admin/**
          filters:
            # 限流配置
            - name: RequestRateLimiter
              args:
                key-resolver: '#{@remoteAddrKeyResolver}'
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200
        # 代码生成模块
        - id: pig-codegen
          uri: lb://pig-codegen
          predicates:
            - Path=/gen/**
        # 代码生成模块
        - id: pig-quartz
          uri: lb://pig-quartz
          predicates:
            - Path=/job/**
        # 固定路由转发配置 无修改
        - id: openapi
          uri: lb://pig-gateway
          predicates:
            - Path=/v3/api-docs/**
          filters:
            - RewritePath=/v3/api-docs/(?<path>.*), /$\{path}/$\{path}/v3/api-docs

Spring Cloud

Spring Cloud 是一整套用来构建和管理“分布式微服务系统”的工具集。
「微服务系统的全家桶」

  • 传统单体项目:一个项目包含了所有功能,部署在一个服务里。

  • 微服务架构:把系统拆成多个独立的小服务(例如用户服务、订单服务、商品服务),每个服务都可以独立部署、独立开发、独立扩展。

拆了之后服务间怎么交互?!:

问题举例
服务之间怎么通信?A 服务怎么访问 B 服务?
服务地址怎么发现?B 服务的 IP 是谁?端口是多少?
服务挂了怎么办?有没有熔断机制?
用户请求怎么统一入口?所有请求能不能先经过一个地方统一鉴权、限流?
配置这么多服务,怎么管理?能不能有一个配置中心?

Spring Cloud 核心模块:

模块作用类比
Spring Cloud Gateway网关,统一请求入口、路由、限流高速公路收费站
Nacos / Eureka注册中心,服务自动注册发现电话簿/联系人列表
OpenFeign服务调用客户端(HTTP)拨电话的工具
Hystrix / Sentinel熔断限流,防止雪崩跌倒保护垫
Config配置中心,统一配置管理云端配置文件
Bus消息总线,配置变更通知群发消息
Sleuth + Zipkin链路追踪,查看请求全流程快递跟踪系统
Spring Cloud Gateway

Spring Cloud Gateway 是 Spring 官方提供的一个微服务网关组件,用于:

  • 统一入口:所有请求都先经过网关
  • 路由转发:根据路径、请求头、参数等,把请求转发到对应的微服务
  • 权限校验、限流、熔断降级等

通俗讲:就像超市收银台,你不同商品(服务)都通过一个地方集中收银(请求都先走网关)。

上述.yml配置中

spring:
  cloud:
    gateway:
      locator:
        enabled: true  # 动态注册服务(结合 nacos、eureka 等注册中心)
      routes:         # 静态配置路由列表
        - id: pig-auth
          uri: lb://pig-auth
          predicates:
            - Path=/auth/**

routes 就是我们最关注的内容,每一个 - 项目就是一个微服务的路由规则。

  • id 唯一标识
  • uri 转发的目标服务。lb:// 表示走注册中心(如 Nacos)进行负载均衡
  • predicates 匹配路径才会路由,比如 /auth/** 请求才转发
  • locator.enabled=true 开启服务发现的自动路由,根据服务自动生成 lb://pig-auth 路由 (如果rotues里有,优先用静态配置的)
  • filters 可选:对请求进行增强,如限流、鉴权、改写路径等

pig-upms 核心业务

  • Controller :对外提供接口
  • Service :封装具体业务逻辑
  • Mapper :与数据库交互

项目交互细节

在这里插入图片描述

验证码

在这里插入图片描述

Request URL:
http://localhost:8888/api/admin/code/image?randomStr=477ba151-80ab-43cf-b70b-a5077dd4f919
Request Method:
GET
Status Code:
200 OK

通过路径找到对应代码:

在这里插入图片描述
为什么前面有 /api/admin 呢,见上文 pig-gataway 网关介绍

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

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

相关文章

探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并

探秘Transformer系列之&#xff08;26&#xff09;— KV Cache优化 之 PD分离or合并 文章目录 探秘Transformer系列之&#xff08;26&#xff09;--- KV Cache优化 之 PD分离or合并0x00 概述0x01 背景知识1.1 自回归&迭代1.2 KV Cache 0x02 静态批处理2.1 调度策略2.2 问题…

C++语言程序设计——02 变量与数据类型

目录 一、变量与数据类型&#xff08;一&#xff09;变量的数据类型&#xff08;二&#xff09;变量命名规则&#xff08;三&#xff09;定义变量&#xff08;四&#xff09;变量赋值&#xff08;五&#xff09;查看数据类型 二、ASCII码三、进制表示与转换&#xff08;一&…

Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server

1.简单介绍 MCP是Model Context Protocol的缩写&#xff0c;是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源&#xff0c;工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中&#xff0c;目前最新版本…

python文件打包无法导入ultralytics模块

&#x1f4a5;打包的 .exe 闪退了&#xff1f;别慌&#xff01;教你逐步排查 PyInstaller 打包的所有错误&#xff01; &#x1f6e0; 运行 .exe 查看报错信息✅ 正确姿势&#xff1a; ⚠ importlib 动态导入导致打包失败❓什么是动态导入&#xff1f;✅ 解决方式&#xff1a; …

AMBA-CHI协议详解(二十六)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transactions AMBA-CHI协议详解(五)- Transaction identifier fields AMBA-CHI协议详解(六…

Go小技巧易错点100例(二十六)

本期分享&#xff1a; 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文&#xff1a; string转[]byte是否会发生内存拷贝 在Go语言中&#xff0c;字符串转换为字节数组&#xff08;[]byte&#xff09;确实会发生内存拷贝。这是因为在Go中&#xff0c;字…

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …

ubuntu20.04+qt5.12.8安装serialbus

先从官网https://download.qt.io/archive/qt/5.12/5.12.8/submodules/ 下载 qtserialbus-everywhere-src-5.12.8.tar.xz 有需要其他版本的点击返回上一级自行寻找对应版本。 也可从 https://download.csdn.net/download/zhouhui1982/90595810 下载 在终端中依次输入以下命令…

如何查看自己抖音的IP属地?详细教程+常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台&#xff08;如抖音、微博、快手等&#xff09;展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全&#xff0c;还是单纯好奇自己的IP归属地&#xff0c;了解如何查看抖音IP属地都很有必要。 本文将详细介…

⑪数据中心网络M-LAG实战

一、DeviceA-M-LAG-Mater配置 1、M-LAG 系统配置。 # m-lag mad exclude interface GigabitEthernet1/0/7 m-lag mad exclude interface Vlan-interface100 m-lag mad exclude interface Vlan-interface101 m-lag system-mac 0002-0002-0002 m-lag system-number 1 m-la…

化工企业数字化转型:从数据贯通到生态重构的实践路径

一、战略定位&#xff1a;破解行业核心痛点 化工行业面临生产安全风险高&#xff08;全国危化品企业事故率年增5%&#xff09;、能耗与排放压力大&#xff08;占工业总能耗12%&#xff09;、供应链协同低效&#xff08;库存周转率低于制造业均值30%&#xff09;三大挑战。《石…

JAVA——初识JAVA

文章目录 如何在cmd上编译、运行代码解析String[] args中放的是什么Java结构编译运行可能遇到的错误Java中的注释Java的三种注释编码不一致的问题 IDEA常用基础开发快捷键补齐快捷键注释快捷键 IDEA的基础调式方法标识符 如何在cmd上编译、运行 在没有集成开发环境下&#xff…

Shell脚本的学习

编写脚本文件 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释&#xff0c;否则使用默认shel 第一步&#xff1a;编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步&#xff1a;加上执行权限&#xff1a;chmod x 脚本文件名.sh 第三步&…

专题十四:动态路由——OSPF

一、OSPF简介 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;采用DIjkstra算法&#xff0c;协议号是89。用于自治系统&#xff08;A…

Cocos Creator Shader入门实战(八):Shader实现圆形、椭圆、菱形等头像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 Shader的学习是一条漫长的道路。 理论知识的枯燥无味&#xff0c;让很多人选择了放弃。然而不得不说&#xff1a;任何新知识、新领域的学习&#xff0c;本身面临的都是问题&#xff01; 互联网和AI给了我…

【AI论文】VCR-Bench:视频链式思考推理的综合评估框架

摘要&#xff1a;思想链&#xff08;CoT&#xff09;推理的进步显著增强了大型语言模型&#xff08;LLMs&#xff09;和大型视觉语言模型&#xff08;LVLMs&#xff09;的能力。 然而&#xff0c;目前仍然缺乏一个严格的视频CoT推理评估框架。 目前的视频基准测试无法充分评估推…

数据中台、BI业务访谈(二):组织架构梳理的坑

这是数据中台、BI业务访谈系列的第二篇文章&#xff0c;在上一篇文章中&#xff0c;我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后&#xff0c;就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例)

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例) (声明:实际操作请遵守网络安全法,仅在授权环境进行测试,仅供个人研究) 一、DVWA靶场简介 DVWA(Damn Vulnerable Web Application)是专为网络安全学习者设计的漏洞演练平台,包含SQL注入、XSS、文件…

库学习04——numpy

一、基本属性 二、 创建数组 &#xff08;一&#xff09;arange a np.arange(10,20,2) # [10,12,14,16,18] 只有一个参数n的话&#xff0c;默认是从0到n-1的一维数组。 &#xff08;二&#xff09;自定义reshape a np.arange(12).reshape((3,4)) [[ 0 1 2 3][ 4 5 …

Win10系统安装WSL2-Ubuntu, 并使用VScode开始工作

本教程基于博主当前需要使用 WSL2(Windows Subsystem for Linux 2) 而编写&#xff0c;将自己使用的经过分享给大家。有什么意见建议敬请大家批评指正。此过程需要打开 Microsoft Store 话不多说&#xff0c;立即开始~ 文章目录 1. 检查系统版本2. 启动 WSL 功能3. 安装Ubuntu4…