Files
dc-solon-gateway/.claude/memory/solon-pitfalls.md
T
lianlonggangandClaude 020f112124 feat: 完成数据中心转发网关核心功能(真实联调通过)
核心功能(已连接真实源服务器验证):
- /sys/watchUserLogin 本地处理:RSA解密验证设备密码(防伪造) + 单飞换token + Redis缓存
- 业务接口经本地通配Controller手动HttpUtils透传至源服务器 + 401检测清缓存
- token失效三重自愈:10秒探活 + 预过期刷新 + 被动401兜底

配置隔离(dotenv风格)+ 安全:
- .env 存敏感信息不入库;app.yml 用 ${KEY} 占位符引用;EnvLoader启动前加载
- 移除fastjson(规避0day),JSON改用Solon内置snack4

联调修复多个Solon实际API问题(配置文件名/YAML插件/打包/redisx/注解路径等)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-05 15:32:17 +08:00

2.6 KiB
Raw Blame History

name, description, metadata
name description metadata
solon-pitfalls Solon框架的正确API用法(redisx/定时任务/HTTP/注解/配置文件/打包),踩坑后实测确认
type
reference

联调实测确认的 Solon 4.0.4 正确用法(多次踩坑后验证,务必牢记):

  • 配置文件名Solon 默认读 app.yml不是 application.yml。配置文件名错会导致所有配置读不到(null)。
  • YAML 插件:默认只读 .properties,需加 org.noear:solon-config-yaml 依赖才能读 .yml,否则报 profile is not supported
  • 打包插件:用 org.noear:solon-maven-pluginrepackage 目标),不要用 maven-assembly-plugin(版本号易错,且非 Solon 标配)。插件版本用 3.10.5(与 solon 主框架 4.0.4 不同版本线)。
  • 日志:需加 slf4j-simple 实现,否则 SLF4J 退化为 NOP 无日志。
  • Redisredisx:是独立库,无自动注入。手动 new RedisClient(Properties)Properties key 为 server/db/password/user/maxTotal不要@Inject("${redis}") RedisClient。APIgetBucket().store/getopen(session -> session.key(k).delete())
  • 定时任务注解@Scheduled/@EnableSchedulingorg.noear.solon.scheduling.annotation(来自 solon-scheduling 依赖,非 solon-scheduling-simple)。
  • Context:路径 org.noear.solon.core.handle.Context(非 org.noear.solon.core.Context)。方法:path()queryString()method()body()headerNames()header(name)status(int)headerSet(k,v)output(String)
  • HTTP 客户端solon-net-httputilsHttpUtils.http(url).exec(method) 返回 HttpResponse。状态码 resp.code()(非 status)。body 用 bodyOfJson(String)(无 body(String) 单参重载,只有 body(byte[])/body(content,contentType))。响应体 resp.bodyAsString()
  • 占位符${KEY} 能解析 System.setProperty 注入的值(联调验证)。
  • JSON 返回Controller 返回 HashMap 会被 snack4 序列化为 {key=value} 非标准 JSON。返回标准 JSON 用 snack4 ONodenew ONode().asObject() + .set(k,v)+ @Produces("application/json")不使用 fastjson(规避 0day 漏洞),JSON 处理统一用 Solon 内置 snack4org.noear.snack4.ONode)。
  • snack4 API:解析 ONode.ofJson(str);取值 node.getOrNull(key).getString()/.getLong();构造对象 new ONode().asObject().set(k,v);序列化 ONode.serialize(obj)node.toJson()

关联 architecture-local-passthroughjeecg-token-mechanism