架构概览
Firmiana 遵循典型的 Micronaut 分层架构模式。
分层图
核心组件
控制器
控制器按功能组织在 com.firmiana.matrix.controller 下:
服务
服务包含业务逻辑。最重要的几个:
仓储
所有仓储都是 Micronaut Data JDBC 接口,使用 @JdbcRepository(dialect = Dialect.H2) 注解。遵循 Micronaut Data 命名约定进行查询推导。
实体
实体使用 Lombok @Data / @Getter / @Setter 注解,通过 @MappedEntity 映射到 H2 表。关键实体:User、Room、Event、RoomMember、UserAccessToken、MediaMetadata、EventRelations、DeviceInbox。
请求生命周期
- HTTP 请求到达 Netty
- Micronaut 将请求路由到对应的控制器方法
MatrixAccessTokenValidator根据user_access_tokens表验证 Bearer TokenCurrentUserService将用户身份提取到请求上下文- 控制器委托给服务层
- 服务执行业务逻辑,调用仓储
- 仓储通过 Micronaut Data JDBC 查询 H2
- 响应按照 Matrix 规范序列化为 JSON
横切关注点
- 错误处理:
MatrixExceptionHandler将异常转换为 Matrix 错误响应 - 限流:
RateLimiter基于滑动窗口的按 IP 限流 - 日志:Logback,控制台 + 滚动文件输出(
logs/app.log) - 安全头:CSP、nosniff、DENY frame、HSTS
- CORS:可配置的跨域策略(开发环境为宽松模式)