weicw
|
6bfdae5787
|
fix(security): 文件内联预览默认需登录,公开目录改为显式白名单
- file.public-preview 默认值由 true 改为 false(application.yml 与 @Value 同步),
上传一律落在 /yyyyMMdd/ 日期目录,默认公开等于把所有上传文件(含盖章证明材料)
变成匿名可读;公开页面引用的文件必须把所在目录列进 file.public-dirs
- 注释写清「公开页面引用的文件必须列进白名单,否则匿名访问会被拒」,同步更新
FileAccessRules 类注释
- 删掉只被测试调用的 FileAccessRules.isPublicFileRequest(测试钉住的是没上线的
平行判定);测试改为断言 downloadPatterns / permitAllPatterns /
authenticatedPatterns 的内容与顺序
- 顺带把 gxmu.module-registry.strict 改成 ${GXMU_MODULE_REGISTRY_STRICT:true},
与相邻配置一致
refs #58
|
2026-11-03 23:14:13 +08:00 |
|
weicw
|
02b2e4b56b
|
merge: spec58/integration(带进 #59 schema 与已合并的集成顶部)
|
2026-11-03 22:29:27 +08:00 |
|
weicw
|
11f0f90f7a
|
feat(spec58): 模块注册表后端与模块硬编码收敛(#60)
- 新增 gxmu/module 包:ModuleRegistry 实体/Mapper/Service,listEnabled 按 sort_number 升序,titleOf 未注册回退 module 原串
- 新增 GET /api/gxmu/module-registry/list(需登录),返回启用模块元数据
- ReviewFlowConfigServiceImpl / ReviewListServiceImpl 的模块名映射改读注册表,查不到回退原串
- DeclareGuardServiceImpl 的模块集合改为注册表驱动,含 enabled=0(停用模块存量仍可撤回/作废)
- 启动期一致性校验:table_name≠module 或业务表缺失即启动失败,gxmu.module-registry.strict=false 可关闭
- 单测 13 例:注册表加载与排序、titleOf 回退、启动校验、module 名回退
|
2026-11-03 22:29:27 +08:00 |
|
Codex
|
d65e8453f5
|
fix(file): 下载需登录,内联预览与缩略图默认公开
- /api/file/download/** 恒需登录,注册顺序排在公开模式之前
- 新增 file.public-preview(默认 true):内联预览 /api/file/*/* 与缩略图默认匿名
- file.public-dirs 保留为额外公开目录,语义限定在原图与缩略图
- 测试补三条:下载无白名单也需登录、内联默认公开、public-preview=false 时内联需登录
|
2026-11-03 22:26:52 +08:00 |
|
Codex
|
94071092e3
|
fix(review): 审批动作校验归属、驳回必须写意见、文件下载需登录
- PUT /api/gxmu/review-list 与 /batch:操作者必须是待办行 user_id,否则 code 403
- status=2 且意见为空时拒绝并提示「驳回必须填写审核意见」
- GET /api/file/** 由匿名改为需登录,公开目录走 file.public-dirs 白名单
- 新增 FileAccessRules 纯规则组件,SecurityConfig 按其产出注册 antMatchers
- 新增 ReviewListControllerAuthTest(8 例)与 FileAccessRulesTest(7 例)
|
2026-11-03 22:23:35 +08:00 |
|
b2894lxlx
|
d54f559d34
|
fix: 审核列表与申报可见性,并统一 Docker 北京时区
修复团支部等角色待审漏数、PageParam 对 Collection 的 IN 条件失效,以及容器默认 UTC 导致时间偏移 8 小时的问题。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-24 14:55:11 +08:00 |
|
weicw-dshsa
|
a8c8dd8643
|
feat(dify): 全部迁移到内网实例,统一为单份配置
VPN 打通后开发机可直连内网,原先「默认公网 + prod 覆盖内网」的双份配置
已无必要,且两套 Key/知识库 ID 完全不通用(实测互打一律 401),
留着只会造成误用。公网那套整体移除,回退到 git 历史取。
- application.yml:base-url 与 8 个应用 Key、全部知识库密钥/ID 改指内网;
原默认值来自公网,其注释同步改写
- application-dev.yml / application-prod.yml:删除 dify 覆盖段。
YAML map 是按键合并而非整体替换,保留一份与默认值相同的覆盖
只会在将来漏改时混出「一半内网一半公网」的状态
- DifyProperties:默认 baseUrl 改内网,类注释同步
修复一个上线起就坏的接口:
- admin 端「竞赛历史」文档列表按 challenge-cup 取库,而该 ID
b342f096-… 在**公网实例上也返回 404**(公网真实的挑战杯库是
7c812029-…,从未登记),故该接口一直不可用。改指内网「竞赛案例」
库(181d58e3-…,145 篇),实测已能列出文档。对外路径保持
/challenge-cup/documents 不变,以免影响 admin 端调用
清理失效的工作流变量(内网实测已从开始节点移除):
- document-process 的 query / pdf_url,declaration 的 parse_value。
三者配置为空串以显式丢弃 —— 直接删行会退回「按原名透传」,
反而把 pdfUrl / parseValue 这类驼峰名发给 Dify。实体字段保留,
不破坏 /documentProcess/upload 的入参契约(pdfUrl 仍参与
「必须提供文件或 pdfUrl」的校验,只是不再转发)
- 注:Dify 对多传变量静默忽略,故此前不报错、功能未受影响,
属「看着对其实无效」的配置
测试:改断言为内网值,并新增「不残留任何公网配置」「失效变量必须
配成空串」等防回归用例;变异验证(base-url 改回公网 / 空串改回生效名)
确认用例有真实判别力。Dify 相关 44 例全绿。
Refs: .scratch/dify-probe/README.md, .scratch/ai-assistant/map.md
|
2026-10-12 12:37:33 +08:00 |
|
weicw-dshsa
|
cbbe3b87b4
|
修改端口号
|
2026-09-22 20:35:21 +08:00 |
|
weicw-dshsa
|
7a90d79352
|
修复统一身份认证登录:补回从未提交的 gxmu.auth 配置
线上 /api/sso/login 报「学校统一身份认证未配置,请联系管理员」,
/api/sso/available 返回 false。根因不是代码,是配置:gxmu.auth 段
只存在于本地工作区,从未进入任何一次提交。
证据:git log -S GXMU_AUTH_APPID 只命中两处,都不是 application.yml ——
LyuapAuthClientIT 里硬编码的兜底值,以及 .scratch/student-sso/README.md
第 5.1 节那句「已写进 application.yml」。而 6f04a64(新增统一身份认证登录)
的 13 个文件全在 src/main/java 与 src/test,根本没碰 resources。
后果:GxmuAuthProperties.appId 默认为 null → available() 为 false →
login() 在凭据校验处直接抛异常,请求根本到不了认证平台。
之所以单测全绿而功能全废:SsoLoginServiceImplTest 把 GxmuAuthProperties
整个 mock 掉了(getAppId 固定返回 "gxmu-app"),这类测试永远发现不了
「yml 里没这一段」。Dify 那批配置当初踩的也是同一类坑。
- application.yml 补回 gxmu.auth 段:enabled/base-url/app-id/app-secret/
timeout-ms/allow-unknown-user,与 openplat 凭证同样处理,默认值写入
并保留 GXMU_AUTH_APPID / GXMU_AUTH_APPSECRET 环境变量覆盖
- 新增 GxmuAuthPropertiesBindingTest:照 DifyProdProfileBindingTest 的做法
直接绑定 yml 断言,不启动容器、不依赖数据库与 Redis。四条用例先红后绿,
最后一条是端到端语义 —— 配置齐备时 available() 必须为 true,而不只是
「配置字段非空」
已联网验证(真实打到 cas.gxmu.edu.cn):available 由 false 变 true;
不存在的学号返回平台业务码「学号不存在,请确认后重试」,证明 appid 与
secret 已被平台认下。
注:TestMain / WebSoftApplicationTests 两项失败为预先存在,
已用 git stash 在改动前复现同一错误(serverEndpointExporter 的
ServerContainer not available),与本次改动无关。
|
2026-09-21 19:58:48 +08:00 |
|
weicw-dshsa
|
8c994d9ed2
|
Dify 配置外置并切至内网实例
接口地址与各应用 API Key 原先硬编码在 AiController 与
KnowledgeBaseController 中,换环境要改代码、密钥还会散落在多处。
新增 DifyProperties 统一收敛到 dify 配置节点,并补上文档中缺失的
两个应用与知识库管理接口。
- 新增 DifyProperties,外置 base-url / 8 个应用 Key / 知识库密钥,
默认值保持公网实例,本地开发不受影响
- 生产 profile 覆盖为内网 10.100.158.15,含全部 8 个应用 Key 与
两个知识库的独立密钥
- 新增申报书生成、智能文档处理两个工作流接口(含文件上传版本),
接入既有的 WebSocket 流式推送与停止机制
- KnowledgeBaseController 补齐知识库增删改查、文档管理与索引进度,
并对文档状态动作加白名单,避免路径参数被任意拼接
- 修正 AI 内容创作的 number 变量名:Dify 侧为 Number,
变量名大小写敏感,此前一直发送小写导致该功能缺参
- 生产下显式覆盖公网知识库 ID 的密钥:YAML 的 map 按键合并而非整体
替换,不覆盖会残留指向公网实例的死密钥
工作流变量名取自内网实例实测(probe-dify.sh),其中申报书生成与
文档处理两组变量与公网命名习惯不一致,故以配置映射承载,改名只需
改 yml 而非改代码。
新增 18 项测试,覆盖配置绑定、profile 覆盖完整性(逐项断言 8 个
Key 均已覆盖且不残留公网 Key)与入参到 Dify inputs 的映射。
|
2026-09-21 19:46:49 +08:00 |
|
weicw-dshsa
|
3e2d7b65a6
|
教师同步派生登录账号
同步教师名册时,若存在手机号则建号:手机号即 username/phone,
后六位即密码,user_code 存教工号(这是与名册之间唯一稳定的反查键,
后台用户管理页改不了——手机号可改,用它反查会在改号后断链)。
推翻 ADR-0001 中「教师不建账号」的结论,见新增的 ADR-0008。
学生仍走认领,不受影响。
只建账号、不建角色:teacher 角色由运维在后台创建,代码查不到时
静默跳过。授角色逻辑同时挂在「新建」与「账号已存在」两个分支上,
因此运维建完角色后重跑一次同步即可给全部已有账号补齐。
停用冻结带 20% 比例护栏:全量同步若因平台异常拉回部分数据,
差集会把大批在职教师误判为消失。误停用名册是数据不准(可重跑),
误冻解是安全问题(离职教师仍能登录),两侧取舍不对称,宁可漏冻结。
开关 gxmu.openplat-sync.teacher-account.enabled 默认关闭。
|
2026-09-19 20:39:13 +08:00 |
|
weicw-dshsa
|
45b7a42331
|
移除基础配置里冗余的 redis 连接项
这些值与 Spring Boot 的默认值一致(127.0.0.1:6379 / db 0 / 空密码),
生产环境由 application-prod.yml 覆盖,删掉不改变行为。
|
2026-09-15 17:21:35 +08:00 |
|
weicw-dshsa
|
cd54039f28
|
接入医科大开放平台数据同步
新增 com.gxwebsoft.gxmu.openplat:开放平台客户端(oauth 鉴权、token 缓存与失效
重取、分页拉取)、部门/教师/班级/学生四段同步、异步编排与手动同步接口、学生认领、
学生名册查询与导出、每天 03:30 的定时任务、同步记录。
关键设计:
- 名册与登录账号分离,学生通过「认领」(手机号自动 / 学号姓名自助)关联 sys_user
- 组织数据以 sys_organization 为唯一载体,gxmu_college 废弃
- 平台无可用增量字段,只做全量拉取 + 幂等 upsert
- 上游消失只停用不删除,且只作用于同步来源的记录(避免误停用人工维护的研究生班)
- 平台权威字段按白名单覆盖,人工字段不触碰
- 码表可配置并保留原始码,码值实测存在两套编码混用,不做硬编码
- 手动同步为异步:提交返回批次号,前端轮询 /status 看分段进度
性能:
- 班级/部门由逐条 update 改为多行 upsert,班级 1584 条 41s -> 0.19s
- 码表解析加进程内缓存,学生同步由 >17 分钟不完成 -> 170 秒完成 98187 行
迁移脚本需手动执行(可重复执行):
sql/20260912_create_openplat_sync_tables.sql
sql/20260912_add_openplat_menu.sql
离线单测 43 个;另有联网集成测试 OpenPlatformClientIT(需 -Dopenplat.it=true)。
|
2026-09-15 15:54:49 +08:00 |
|
b2894lxlx
|
f379291e4f
|
260720
|
2026-07-20 11:48:06 +08:00 |
|
b2894lxlx
|
bfbde8a0f5
|
250522
|
2025-05-22 10:27:57 +08:00 |
|
b2894lxlx
|
9139457203
|
240401
|
2024-04-01 22:11:01 +08:00 |
|
gxwebsoft
|
426d0a685a
|
合并代码
|
2024-02-03 16:42:16 +08:00 |
|
b2894lxlx
|
2fd8b3d341
|
调整
|
2024-01-31 14:54:49 +08:00 |
|
b2894lxlx
|
8307a16689
|
完善合同管理;
新增结算管理
|
2023-06-12 01:32:34 +08:00 |
|
南宁网宿科技
|
912944faea
|
Initial commit
|
2023-06-03 23:56:49 +08:00 |
|