SmartWeb 服务器与配置
选择服务器
SmartWeb 核心只定义 InternalWebServer。具体服务器模块通过配置提供默认实现:
| 模块 | 实现类 |
|---|---|
| SmartHTTP | smartweb.server.shttp.SmartHTTPServer |
| Undertow | smartweb.server.undertow.UndertowServer |
默认实现由服务器模块写入 yu.web.server.default。应用可用 webServer.impl 覆盖。
默认服务器配置
properties
webServer.port=8080
webServer.cors=https://example.com
webServer.sessionNum=2000
webServer.allowMethod=GET,POST,PUT,DELETE,PATCH,OPTIONS,HEAD
# webServer.impl=fully.qualified.ServerClass| 配置 | 是否必需 | 说明 |
|---|---|---|
webServer.port | 是 | 监听端口 |
webServer.cors | 否 | CORS 来源配置 |
webServer.sessionNum | 否 | Session 缓存容量,默认 2000 |
webServer.allowMethod | 否 | 允许的方法列表 |
webServer.impl | 否 | 覆盖服务器实现类 |
源码当前同时将 sessionNum 用作 Session 空闲过期秒数的读取键;若你需要精确控制过期时间,应先验证当前版本行为。
多服务器
命名 Controller 根路由会创建命名服务器,并读取 webServer.<name>.*:
properties
webServer.admin.port=8081
webServer.admin.impl=smartweb.server.undertow.UndertowServer每个服务器拥有独立路由和 Session 缓存。启动与停止时会发布 WebServerStatusChangedEvent。
上传配置
SmartWeb 会把 webServer.upload 映射为 WebServerUploadConfig。不同服务器实现对上传限制的落实方式可能不同,生产环境应同时配置反向代理和服务器级请求体上限。
properties
webServer.upload.maxSize=50m
webServer.upload.maxFile=10
webServer.upload.singleFileMaxSize=10m
webServer.upload.writeTmpFileSize=10k
webServer.upload.tempDir=/var/tmp/smartweb| 配置 | 默认值 | 说明 |
|---|---|---|
maxSize | 10m | 单次上传总量限制 |
maxFile | -1 | 文件数量限制,负数表示实现默认/不限 |
singleFileMaxSize | 10m | 单文件限制 |
writeTmpFileSize | 10k | 超过阈值写临时文件 |
tempDir | JVM 临时目录 | 上传临时目录 |
目录必须存在、可写并有清理策略。应用层限制不能替代网关和服务器层限制。
服务器实现成熟度
SmartHTTP
当前实现覆盖 JSON Object/Array、multipart 上传、Session 与 WebSocket。源码仍有以下边界:
Request.inputStream固定为 null。userAddress、clientAddress尚未实现。- JSON Body 不是合法 Object/Array 时进入 TODO。
- XML Body 尚未实现。
Undertow
当前实现覆盖基本路由、查询参数、JSON Object 与 Session,但:
bodyArray固定为 null。uploadFiles固定为 null。inputStream固定为 null。userAddress、clientAddress尚未实现。- XML Body 尚未实现。
- WebSocket 适配代码未出现在 Undertow 模块当前主源码中。
因此需要上传、JSON Array Body 或 WebSocket 时优先验证 SmartHTTP。选择 Undertow 前应为应用实际使用的参数类型编写 HTTP 端到端测试。
生产部署检查
- 用反向代理终止 TLS,并正确清洗/传递 Forwarded Headers。
- 不依赖当前未实现的客户端地址字段做安全决策。
- 明确 Session Cookie 名称和安全属性;当前实现默认行为需按适配器核对。
- 为 JSON 格式错误建立统一 400 处理,避免 TODO 异常成为 500。
- 在网关和服务器两层限制请求体、上传和连接数。
- 分别测试 OPTIONS/CORS、HEAD、异常响应和连接关闭。