发布时间:2026/8/23 22:33:54
04-一个请求的完整旅程 04-一个请求的完整旅程前面三篇讲了全景、哲学、模式。从这篇开始进入代码。以一次分页查询用户列表和一次审批通过任务为例把 HTTP 请求从浏览器到 Oracle 再回来的每一跳拆开——这一篇是后面所有引擎类文章的索引。文章目录04-一个请求的完整旅程一、例一分页查询 POST /ea/page/SYS_USER_s第1跳JwtAuthFilterplatform模块第2跳EaControllerformbuilder模块第3跳EaEnginemetadata模块第4跳返回二、例二审批通过 POST /api/workflow/process/complete三、两条链的公共部分四、系列后续怎么展开一、例一分页查询 POST /ea/page/SYS_USER_s第1跳JwtAuthFilterplatform模块browise-platform/src/main/java/com/browise/platform/auth/JwtAuthFilter.java6.0KBorder1 的原生 Filter不依赖Spring Security。① enabled检查browise.auth.enabled配置开关 ② excludePaths匹配/auth/ /login /captcha /error 放行支持/**前缀 ③ extractTokenAuthorization: Bearer xxx → 没有则查Cookie BROWISE_AT ④ JwtUtil.validateHS256验签 exp过期检查 ⑤ JwtBlacklist双查 isInvalid(psnId, iat) ← 用户级改密后iat之前的全失效 isInvalidByToken(token) ← token级登出单设备 ⑥ CacheManager.getUserProfile(psnId) → OP_PERSON SYS_USER.STATUS禁用即拒 ⑦ CurrentUser.set(profile) ← ThreadLocal业务代码随处可取 ⑧ MenuAuthProvider.canAccess(profile, /ea/page) → 用户角色 → SYS_ROLE_MENU → 菜单路径匹配 → 不匹配返回403 ⑨ finally CurrentUser.clear() ← ThreadLocal必须清否则线程池复用串用户第2跳EaControllerformbuilder模块browise-formbuilder/.../controller/EaController.java15.2KBPostMapping(/ea/page/{sqlId})publicResultpage(PathVariableStringsqlId,RequestBodyMapString,Objectparams){intpageNum...,pageSize...;ListMapString,ObjectrowseaEngine.query(sqlId,params,pageNum,pageSize);longtotaleaEngine.count(sqlId,params);returnResult.ok(PageResult.of(rows,total));}第3跳EaEnginemetadata模块browise-metadata/.../ea/core/engine/EaEngine.java549行内部五步① EaMetadataCache.get(sqlId) → ConcurrentHashMap查缓存 → 命中EaSqlMeta EaTableMeta[] EaFieldMeta[] EaConditionMeta[] → 未命中抛EA_NOT_FOUND启动时MetadataLoader已全量装载 ② SqlBuilder.buildSelect(sqlId, params, dialect) → appendColumns按EaFieldMeta.dataType(1字符/2日期/3数字/4日期时间) 选方言列表达式Oracle: to_char(birth,yyyymmdd) → appendFromEaTableMeta多表JOIN或主表 → where 11 → appendJoinAndWhere按EaConditionMeta拼条件 conditionType1固定值始终拼接动态参数null跳过 ③ dialect.paginate(sql, orderBy, start, end) → OracleDialectROWNUM三层包装第10篇专述 → MySqlDialectLIMIT ? OFFSET ? ④ EaConnectionProvider.getConnection() → BrowiseEaProvider从Spring DataSource取连接 → PreparedStatement参数化执行禁止字符串拼接 ⑤ postProcess(rows) → 遍历EaFieldMeta isEncrypted() → Sm4EncryptStrategy.decrypt()逐字段解密 isMasked() → maskRule(3,4)脱敏→320***********1234 → SlowSqlMonitor.check(sql, params, elapsedMs) 超阈值log.warn 可选文件追加第4跳返回Result { code:0, msg:success, data:{ rows:[...], total:137 } } → GlobalExceptionHandler兜底任何异常→Result.error(-1,msg) → 前端httpClient.ts响应拦截code!0抛业务错误401触发登出 → useRowSet灌入primary缓冲_t全为0 → MetaGrid渲染二、例二审批通过 POST /api/workflow/process/complete这条链更长穿platform→workflow→metadata三个模块① JwtAuthFilter同上 ② ProcessControllerbrowise-workflow/.../ProcessController.java28.9KB ├─ resolveFormSqlid(taskId) │ → WorkflowConfigService.findForm()查ACT_RE_BINDINGFORM │ → 拿到流程节点绑定的表单sqlId │ ├─ 表单数据upsert到T_DATA │ → FormDataMapper存在则update不存在则insert │ → 走EA引擎的insert/updateByFields │ └─ FlowableProcessService.completeTask(taskId, variables) │ ├─ ①前置拦截器 │ InterceptorChainService按TaskInterceptorConfig表 │ 读before拦截器id串从ApplicationContext取Bean执行 │ ├─ ②taskService.complete() │ → Flowable引擎推进到下一节点 │ ├─ ③后置拦截器 │ 同①after id串 │ └─ ④下一任务处理人通知 → WorkflowNotifyService发WorkflowMessageEventSpring事件 → TransactionalEventListener(AFTER_COMMIT)监听 → 事务提交后才WebSocket推送 ← 关键事务没提交就推送用户点待办却查不到数据三、两条链的公共部分环节组件位置认证JwtAuthFilter CurrentUser(ThreadLocal)platform鉴权菜单RBAC AuthAspect(RequirePermission/DataScope)platform数据EaEngine SqlBuilder Dialectmetadata异常GlobalExceptionHandler → Resultplatform上下文清理finally CurrentUser.clear() DataScope popplatform这就是16个模块在运行时的协作方式——不是所有请求都穿过所有模块而是按URL前缀路由到对应Controller公共能力认证/异常/EA数据访问横切所有链路。四、系列后续怎么展开这篇出现的每个环节后面各有一篇或几篇拆到底本篇环节后续文章EaEngine五步06篇引擎调度、07-08篇SqlBuilderDialect分页09-10篇8方言与ROWNUM演化postProcess加密脱敏14-15篇JwtAuthFilter九步25-26篇双令牌、黑名单CurrentUser29篇ThreadLocal上下文InterceptorChain41篇数据库配置的拦截器链事件推送43篇事务提交后WebSocket✅ 亮点用一查一改两条真实链路把16模块的运行时协作串起来每跳标注模块归属和源码文件——是整个系列的导航图。适合第一次接触多模块项目的人建立全局观。扩展方向后续每篇都是本文某一跳的代码级展开。

相关新闻

2026/8/23 22:33:54

Docker部署翼龙面板前端:从环境准备到生产级配置全攻略

1. 为什么选择Docker部署翼龙面板前端?如果你正在管理一个游戏服务器,或者运营一个提供多用户游戏服务器托管服务的平台,那么Pterodactyl(翼龙面板)这个名字你大概率不会陌生。它是一个开源的、功能强大的游戏服务器管…

2026/8/23 22:28:54

python的运筹学工业场景模拟第八十七篇:读取管网台账,提取每条管道最大流量,清洗废弃管道,构建网络最大流模型参数。

管网“疏通器”:用Python清洗废弃管线,给最大流模型造“干净拓扑”“某化工园区有 87 条工艺管道、12 个关键节点,每月做一次管网输配能力评估。计划员花 2 天手工整理管网台账、剔除废弃管线、核对每条管的最大流量,再手动录入最…

2026/8/23 22:28:54

推荐几家做草花靠谱的供应商

引言在园林景观、城市绿化等众多场景中,草花凭借其绚丽多彩的花色、丰富的品种以及较强的适应性,占据着重要地位。选择一家靠谱的草花供应商至关重要,它能为项目的成功提供有力保障。接下来为大家推荐几家在行业内比较靠谱的草花供应商。地邦…

2026/8/23 23:39:23

谁在抢占具身智能的“数据油田”?

在这场轰轰烈烈的“数据圈地运动”中,一批新物种正在快速崛起。他们不造机器人本体,却掌握着所有机器人公司的命脉。亿欧智库甄选的20家数据采集标杆案例,为我们勾勒出了一幅清晰的产业地图。“重资产派”以无*智科和数*堂为代表。他们信奉“…

2026/8/23 23:39:23

C语言结构体:自定义数据类型,让变量打包出行

本章目标:掌握结构体声明与初始化 理解内存对齐的来龙去脉 学会结构体正确传参 理解自引用原理引入:数组的局限,就是结构体的舞台 学到现在,我们接触的数据类型都是"单一类型": int a → 一个整数double …

2026/8/23 23:39:22

AI行业日报|2026-08-22:5个热点事件

AI行业日报|2026-08-22:5个热点事件 本期日报聚焦大模型基础设施演进、AI数据产业链动态及企业级服务架构优化。内容涵盖推理调度、训练数据需求、模型路由方案、隐私安全机制及智能体工程化实践,供AI从业者与开发者参考。 1. Nvidia研究指出…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…