当前位置: 首页 > news >正文

pig 权限管理开源项目学习

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 网关

一般用的是 Spring Cloud Gateway

路由配置 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 # 监听的延迟时间msconfig: # 配置 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: trueroutes:# 认证中心- id: pig-authuri: lb://pig-authpredicates:- Path=/auth/**#UPMS 模块- id: pig-upms-bizuri: lb://pig-upms-bizpredicates:- Path=/admin/**filters:# 限流配置- name: RequestRateLimiterargs:key-resolver: '#{@remoteAddrKeyResolver}'redis-rate-limiter.replenishRate: 100redis-rate-limiter.burstCapacity: 200# 代码生成模块- id: pig-codegenuri: lb://pig-codegenpredicates:- Path=/gen/**# 代码生成模块- id: pig-quartzuri: lb://pig-quartzpredicates:- Path=/job/**# 固定路由转发配置 无修改- id: openapiuri: lb://pig-gatewaypredicates:- 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-authuri: lb://pig-authpredicates:- 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

通过路径找到对应代码:

在这里插入图片描述


http://www.mrgr.cn/news/97857.html

相关文章:

  • C++项目:高并发内存池_下
  • C++初阶-C++的讲解1
  • 【NLP 面经 9、逐层分解Transformer】
  • vue 入门:组件事件
  • 【图书管理系统】全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)
  • 【大模型理论篇】SWIFT: 可扩展轻量级的大模型微调基础设施
  • 10:00开始面试,10:08就出来了,问的问题有点变态。。。
  • 前端面试宝典---数据类型
  • 如何在Linux系统上通过命令调用本地AI大模型?
  • Vue3+Vite+TypeScript+Element Plus开发-09.登录成功跳转主页
  • 【NLP 面经 9.逐层分解Transformer】
  • 【大模型理论篇】关于生成式模型中联合分布概率学习必要性以及GPT是生成式模型的讨论
  • 强化学习算法系列(一):动态规划方法——策略迭代算法(PI)与值迭代算法(VI)
  • 监测fastapi服务并自动拉起(不依靠dockerfile)
  • React 条件渲染
  • BOTA六维力矩传感器如何打通机器人AI力控操作的三层架构?感知-决策-执行全链路揭秘
  • python爬虫:小程序逆向实战教程
  • 蓝桥杯第十五届C++B组省赛真题解析
  • PDFBox/Itext5渲染生成pdf文档
  • React 响应事件