Web组件 (yudao-spring-boot-starter-web)
引用文件
本文引用的文件
- GlobalExceptionHandler.java
- WebProperties.java
- YudaoWebAutoConfiguration.java
- WebFrameworkUtils.java
- pom.xml
- YudaoBannerAutoConfiguration.java
- BannerApplicationRunner.java
- YudaoApiLogAutoConfiguration.java
- ApiAccessLogFilter.java
- ApiAccessLogInterceptor.java
- ApiAdvice.java
- DesensitizationHandler.java
- DesensitizeBy.java
目录
简介
本文件面向 yudao-spring-boot-starter-web Web组件,系统性梳理其全局异常处理、Web配置、安全防护、日志与脱敏、文档与横幅、以及可扩展点。重点覆盖:
- 全局异常处理器的异常捕获机制、统一响应格式、错误码处理策略
- Web配置(跨域、参数校验、拦截器、路径前缀)的实现与扩展
- XSS防护、SQL注入防护、敏感信息脱敏等安全能力
- Swagger/OpenAPI 文档集成、Banner启动横幅、Jackson序列化配置
- 自定义拦截器、过滤器、异常处理器的接入方式
项目结构
Web组件位于 yudao-framework 子模块下,核心由以下层次构成:
- 配置层:WebProperties、YudaoWebAutoConfiguration
- 异常处理层:GlobalExceptionHandler
- 工具层:WebFrameworkUtils
- 安全与防护:XSS(jsoup)、脱敏注解与处理器
- 文档与横幅:Knife4j/SpringDoc OpenAPI、Banner自动配置
- API日志:ApiAccessLogFilter/Interceptor/Advice
图表来源
- YudaoWebAutoConfiguration.java
- WebProperties.java
- GlobalExceptionHandler.java
- WebFrameworkUtils.java
- ApiAccessLogFilter.java
- ApiAccessLogInterceptor.java
- ApiAdvice.java
- DesensitizeBy.java
- DesensitizationHandler.java
章节来源
核心组件
- 全局异常处理器:统一翻译各类异常为 CommonResult 响应,内置错误码映射与异常日志上报
- Web配置:通过 WebProperties 定义 API 前缀与 UI 地址,YudaoWebAutoConfiguration 实现路径匹配与拦截器注册
- 安全与防护:XSS 清洗、脱敏注解与处理器、权限不足兜底
- 文档与横幅:Knife4j/SpringDoc OpenAPI 集成、Banner 启动横幅
- API日志:多维度日志采集(过滤器/拦截器/AOP Advice)
章节来源
架构总览
Web组件在启动时通过自动装配注册异常处理器、API日志、文档与横幅等能力;对外提供统一的异常响应与安全防护。
图表来源
组件详解
全局异常处理器(GlobalExceptionHandler)
- 职责:统一捕获并翻译异常为 CommonResult,同时记录异常日志,支持模块化表不存在场景的友好提示
- 异常覆盖:
- 参数缺失、类型不匹配、参数校验失败(含组合校验)、消息体解析异常
- 资源不存在(NoHandlerFound/NoResourceFound)、HTTP 方法不支持
- 业务异常 ServiceException(含错误码与消息)
- 权限不足 AccessDeniedException(结合登录上下文)
- 默认兜底异常(记录日志并返回通用错误码)
- 错误码策略:优先使用 ServiceException 中的业务错误码;其余场景映射至全局错误码(如 BAD_REQUEST、NOT_FOUND、METHOD_NOT_ALLOWED、FORBIDDEN、INTERNAL_SERVER_ERROR)
- 异常日志:收集请求上下文、用户信息、堆栈信息、TraceId 等,异 步落库
图表来源
章节来源
Web配置(WebProperties 与 YudaoWebAutoConfiguration)
- WebProperties
- 定义 API 前缀与 Controller 包匹配规则,用于对不同模块(如 APP/Admin)设置独立前缀与扫描范围
- 定义 Admin UI 访问地址
- YudaoWebAutoConfiguration
- 注册拦截器、过滤器、跨域配置等
- 通过 PathMatchConfigurer 将 API 前缀与 Controller 包规则绑定,确保路径匹配一致性
- 集成 API 日志、文档、横幅、XSS、脱敏等能力
图表来源
章节来源
安全与防护
- XSS 防护:引入 jsoup 依赖,用于清洗富文本或输入内容中的潜在危险标签
- SQL 注入防护:通过参数校验、类型转换、白名单式路径匹配与权限控制降低风险
- 敏感信息脱敏:提供 @DesensitizeBy 注解与 DesensitizationHandler 处理器,统一脱敏策略
图表来源
章节来源
Swagger/OpenAPI 文档集成
- 依赖 Knife4j 与 SpringDoc OpenAPI,提供更友好的接口文档体验
- 与 WebProperties 的 API 前缀配合,避免文档泄露至 Nginx 外部
章节来源
Banner 启动横幅
- 通过 BannerApplicationRunner 在应用启动后输出横幅信息,提升可观测性与品牌展示
章节来源
API 日志
- 三种采集方式:
- ApiAccessLogFilter:基于 Servlet 过滤器的请求级日志
- ApiAccessLogInterceptor:基于 Spring MVC Interceptor 的控制器级日志
- ApiAdvice:基于 @RestControllerAdvice 的统一切面日志
- 三者协同,覆盖请求生命周期各阶段
章节来源
- YudaoApiLogAutoConfiguration.java
- ApiAccessLogFilter.java
- ApiAccessLogInterceptor.java
- ApiAdvice.java
依赖关系分析
- Web容器:默认 Undertow(高性能),保留对 Tomcat 的排除与替换能力
- 安全:Spring Security 作为 provided 依赖,仅在全局异常处理中使用
- 文档:Knife4j 与 SpringDoc OpenAPI 并存,满足不同团队偏好
- 日志:依赖 yudao-module-infra-api 进行异常日志异步写入
- 脱敏与 XSS:独立依赖,便于按需启用
图表来源
章节来源
性能与安全特性
- 性能
- Undertow 容器替代 Tomcat,提升并发与低延迟表现
- 异步记录异常日志,避免阻塞请求链路
- 安全
- 统一异常响应,隐藏内部异常细节
- 参数校验与类型转换,降低非法输入风险
- XSS 清洗与脱敏策略,保护敏感信息
- 权限不足统一返回 403,避免越权信息泄露
[本节为通用建议,无需具体文件分析]
故障排查指南
- 异常日志定位