6bfdae5787
- 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
240 lines
9.2 KiB
YAML
240 lines
9.2 KiB
YAML
# 端口
|
||
server:
|
||
port: 38927
|
||
|
||
# 多环境配置
|
||
spring:
|
||
profiles:
|
||
active: dev
|
||
# active: prod
|
||
|
||
application:
|
||
name: server
|
||
|
||
# 连接池配置
|
||
datasource:
|
||
druid:
|
||
initial-size: 5
|
||
min-idle: 5
|
||
max-active: 20
|
||
max-wait: 30000
|
||
time-between-eviction-runs-millis: 60000
|
||
min-evictable-idle-time-millis: 300000
|
||
test-while-idle: true
|
||
test-on-borrow: true
|
||
test-on-return: false
|
||
remove-abandoned: true
|
||
remove-abandoned-timeout: 1800
|
||
#pool-prepared-statements: false
|
||
#max-pool-prepared-statement-per-connection-size: 20
|
||
filters: stat, wall
|
||
validation-query: SELECT 'x'
|
||
aop-patterns: com.gxwebsoft.*.*.service.*
|
||
stat-view-servlet:
|
||
url-pattern: /druid/*
|
||
reset-enable: true
|
||
login-username: admin
|
||
login-password: admin
|
||
|
||
# json时间格式设置
|
||
jackson:
|
||
time-zone: Asia/Shanghai
|
||
date-format: yyyy-MM-dd HH:mm:ss
|
||
|
||
# 设置上传文件大小
|
||
servlet:
|
||
multipart:
|
||
max-file-size: 100MB
|
||
max-request-size: 100MB
|
||
mvc:
|
||
async:
|
||
request-timeout: 600000
|
||
|
||
# 邮件服务器配置
|
||
mail:
|
||
host: smtp.qq.com
|
||
username: 517289602@qq.com
|
||
password: fhvgbekxmxrxcaec
|
||
default-encoding: UTF-8
|
||
properties:
|
||
mail:
|
||
smtp:
|
||
auth: true
|
||
socketFactory:
|
||
class: javax.net.ssl.SSLSocketFactory
|
||
port: 465
|
||
|
||
# Mybatis-plus配置
|
||
mybatis-plus:
|
||
mapper-locations: classpath*:com/gxwebsoft/**/*Mapper.xml
|
||
configuration:
|
||
map-underscore-to-camel-case: true
|
||
cache-enabled: true
|
||
global-config:
|
||
:banner: false
|
||
db-config:
|
||
id-type: auto
|
||
logic-delete-value: 1
|
||
logic-not-delete-value: 0
|
||
|
||
# 框架配置
|
||
config:
|
||
open-office-home: C:/OpenOffice4/
|
||
swagger-base-package: com.gxwebsoft
|
||
swagger-title: 网宿软件 API文档
|
||
swagger-version: 1.0
|
||
token-key: WLgNsWJ8rPjRtnjzX/Gx2RGS80Kwnm/ZeLbvIL+NrBs=
|
||
server-url: https://server.gxwebsoft.com/api
|
||
file-server: http://localhost:38927
|
||
upload-path: /Users/liangxin/Project/JAVA/tower-java/
|
||
local-upload-path: /Users/gxwebsoft/Documents/uploads/
|
||
|
||
# 文件访问规则(spec #58)
|
||
# 下载接口 /api/file/download/** 永远需要登录,「取走原件」不再匿名。
|
||
#
|
||
# 内联预览(/api/file/<dir>/<name>)与缩略图(/api/file/thumbnail/**)默认也需要登录:
|
||
# 上传一律落在 /yyyyMMdd/ 日期目录,日期目录正好是两段路径,默认公开等于把所有上传文件
|
||
# (含盖章证明材料)变成匿名可读。因此默认值从 true 改成 false。
|
||
#
|
||
# 公开页面引用的文件必须把所在目录列进下面的 public-dirs 白名单,
|
||
# 否则匿名访问会被拒(401/403,表现为公开页面的空图)。
|
||
file:
|
||
public-preview: ${FILE_PUBLIC_PREVIEW:false}
|
||
# 公开目录白名单(显式声明,逗号分隔,相对 /api/file):命中这些目录的原图与缩略图
|
||
# 允许匿名读取。留空表示没有任何公开目录——这是安全默认。
|
||
#
|
||
# 注意:当前上传一律落在 /yyyyMMdd/ 日期目录(见 FileStorageService.store),
|
||
# 目录本身不区分公开/私有;写日期目录等于把这些日期的全部文件公开,慎用。
|
||
# 也不要图省事写成 /api/file/**。
|
||
public-dirs: ${FILE_PUBLIC_DIRS:}
|
||
|
||
wx:
|
||
miniapp:
|
||
configs:
|
||
- appid: wxf7ee9cd5801bf7a6
|
||
secret: b418211f69a64c9cecd1e5efc2a5765c
|
||
msgDataFormat: JSON
|
||
|
||
wxpay:
|
||
api-v3-key: g4ny70843ynmcoxwfej0v2yuv9n28nut
|
||
pub-key-id: PUB_KEY_ID_0117329300312025112800181693000807
|
||
app-id: wxf7ee9cd5801bf7a6
|
||
mch-id: 1732930031
|
||
mch-serial-no: 7EE24C695B278DB2C4F0C1CB42069065ECCBE3FD
|
||
|
||
# Dify 平台对接
|
||
#
|
||
# 唯一的实例:内网 http://10.100.158.15/v1(见《Dify API 文档》)。
|
||
#
|
||
# 2026-10-12 完成迁移:此前代码连的是公网实例 http://82.156.98.71/v1,
|
||
# 因开发机连不上内网而一直保留双份配置;VPN 打通后已全部并入内网。
|
||
#
|
||
# 两套实例的应用 Key、知识库 ID、密钥完全不通用(实测互打一律 401),
|
||
# 因此公网那套配置已整体移除,遗留一份只会造成误用。若确需回退,
|
||
# 到 git 历史取本段即可,不要再在配置里维护两套。
|
||
dify:
|
||
base-url: http://10.100.158.15/v1
|
||
timeout-ms: 600000
|
||
apps:
|
||
# 医科大团委智能知识库问答系统
|
||
chat: app-ZLUUbLkAX3FVzDubY06puxAo
|
||
# 活动策划大纲生成(advanced-chat,走 /chat-messages)
|
||
activity-outline: app-4oBWB3HrdNlANdPFG8ZvVTkY
|
||
# AI 内容创作与宣传助手
|
||
manuscript: app-fhhz4fXMkEdVivAEiuWpycn6
|
||
# AI 创意助手
|
||
creative-assistant: app-lAbpxMggNbIrByiDRDfckSSl
|
||
# 项目书质量初审
|
||
project-quality-review: app-J6h5I6Bo4oeBif2EofBGVrGs
|
||
# 竞赛文件预处理
|
||
competition-history-preprocess: app-UzVLKnGwg69uAUdbgFx6XNmc
|
||
# 医科大智能文档处理系统
|
||
document-process: ${DIFY_KEY_DOCUMENT_PROCESS:app-ohdIhk0lVfUwoy10xXRebmjD}
|
||
# 申报书生成
|
||
declaration: ${DIFY_KEY_DECLARATION:app-k20aDmiQYh3LxqZSLuX8wjkU}
|
||
dataset:
|
||
# 知识库列表等不区分知识库的接口所用密钥。
|
||
# 实测该密钥对实例内全部知识库均可用,keys 里逐库登记仅为将来分权留口子。
|
||
api-key: ${DIFY_DATASET_API_KEY:dataset-jaqtnAQvYcQTEjECzxhQfNCv}
|
||
# 知识库 ID -> 独立密钥
|
||
keys:
|
||
181d58e3-78c2-4b7d-939c-57e780a8f7d6: ${DIFY_DATASET_KEY_COMPETITION:dataset-jaqtnAQvYcQTEjECzxhQfNCv}
|
||
3e0ac108-3a0d-41e2-8447-aa1c1044d3ac: ${DIFY_DATASET_KEY_GXMU:dataset-f2a0Hjxix7lBcPNZtNMyKDTQ}
|
||
# 业务代号 -> 知识库 ID
|
||
ids:
|
||
# 竞赛案例(145 篇)。admin 端「竞赛历史」文档列表接口按此代号取库。
|
||
competition-cases: 181d58e3-78c2-4b7d-939c-57e780a8f7d6
|
||
# GXMU 团章(10 篇)
|
||
gxmu-constitution: 3e0ac108-3a0d-41e2-8447-aa1c1044d3ac
|
||
# 工作流变量名映射。
|
||
# 左边是入参实体的业务字段(中划线),右边是 Dify 工作流开始节点的真实变量名。
|
||
#
|
||
# 以下取自 2026-10-12 在内网实例上重跑 probe-dify.sh 的实际输出。
|
||
# 该实例的变量名会随工作流编排调整而漂移,所以每次动工作流都要以探针输出为准,
|
||
# 不要凭直觉推断。
|
||
#
|
||
# 映射为空串 = 丢弃该字段(见 DifyProperties.VariableMapping 的约定),
|
||
# 下面的失效变量即用此法显式剔除:它们已不在开始节点上,
|
||
# 留着只会让人误以为仍在生效。注意不要直接删掉整行 —— 那会退回"按原名透传",
|
||
# 反而把 pdfUrl / parseValue 这种驼峰名发给 Dify。
|
||
workflows:
|
||
# 内网实测仅 pdf_file(文件类)。query/pdf_url 已从开始节点移除,故丢弃;
|
||
# 实体里仍保留这两个字段,是为了不破坏 /documentProcess/upload 的入参契约
|
||
# (前端仍可传,只是不再转发给 Dify)。
|
||
document-process:
|
||
fields:
|
||
query: ""
|
||
pdf-url: ""
|
||
pdf-file: pdf_file
|
||
# 内网实测 core_idea,tech_route,team_intro,upload_file(文件类)。
|
||
# parse_value 已从开始节点移除,故丢弃。
|
||
declaration:
|
||
fields:
|
||
core-idea: core_idea
|
||
tech-route: tech_route
|
||
team-intro: team_intro
|
||
upload-file: upload_file
|
||
parse-value: ""
|
||
|
||
# 医科大开放平台对接
|
||
gxmu:
|
||
openplat:
|
||
base-url: http://210.36.49.10:15031/api/bd-api
|
||
app-id: d50666e1621f493688a2
|
||
app-secret: c12ba36360a82ae7a59a4f0a056ec39d
|
||
kfzzh: twxt2026
|
||
# 开发者密码, 建议用环境变量 OPENPLAT_KFZMM 覆盖
|
||
kfzmm: ${OPENPLAT_KFZMM:twxt2026}
|
||
timeout-ms: 30000
|
||
max-retries: 2
|
||
page-size: 10000
|
||
# 学校统一身份认证(微服务认证平台 API v2.3),小程序的「学号 + 统一身份认证密码」登录走这里。
|
||
#
|
||
# appid/appsecret 由学校认证管理员在认证后台 - 应用管理 - 应用列表 中签发。
|
||
# 2026-09-18 拿到后只在本地验证过(见 .scratch/student-sso/README.md 第 5.1 节),
|
||
# 但这段配置当时漏了提交,代码上线后 /api/sso/login 一直报
|
||
# 「学校统一身份认证未配置,请联系管理员」——见本文件所在提交的说明。
|
||
# 与 openplat 凭证同样处理:默认值写在这里,同时保留环境变量覆盖。
|
||
auth:
|
||
enabled: true
|
||
base-url: https://cas.gxmu.edu.cn/lyuapServer
|
||
app-id: ${GXMU_AUTH_APPID:7D8F6695611309E0}
|
||
app-secret: ${GXMU_AUTH_APPSECRET:24f9dab5-3319-42cc-908d-2748417b7f92}
|
||
timeout-ms: 10000
|
||
# 名册外的账号默认拒绝登录,见 ADR-0001:学生须先同步进名册
|
||
allow-unknown-user: false
|
||
# 模块注册表(spec #58 / ADR 0006):启动期校验注册表 table_name 与 module 一致、
|
||
# 且注册表引用的业务表在库里存在,不一致直接启动失败(用户故事 21)。
|
||
# strict 默认 true;本地无库启动可临时设 GXMU_MODULE_REGISTRY_STRICT=false 跳过校验。
|
||
module-registry:
|
||
strict: ${GXMU_MODULE_REGISTRY_STRICT:true}
|
||
openplat-sync:
|
||
enabled: true
|
||
# 每天 03:30
|
||
cron: 0 30 3 * * ?
|
||
# 教师同步时派生登录账号(手机号即用户名,后六位即密码),见 docs/adr/0008。
|
||
# 默认关闭:首次全量会建出上万账号,需要有意打开。
|
||
# 打开后重跑一次教师同步,即可给已有账号补授 teacher 角色。
|
||
teacher-account:
|
||
enabled: true
|