config 目录配置类说明
在 src/main/java/work/baiyun/chronicdiseaseapp/config 目录下包含了项目中的各种配置类,这些类负责配置应用程序的各种组件和服务。
AuthInterceptor.java
用途
AuthInterceptor 是一个身份验证拦截器,负责从请求中提取 token 并进行验证,确保只有经过身份验证的用户才能访问受保护的资源。
实现细节
- 实现了 Spring 的 HandlerInterceptor 接口
- 支持多种 token 传递方式:
- 标准的 Authorization header(Bearer token)
- X-Token header
- token header
- 请求体中的 token 参数
- 优先使用标准的 Authorization header 方式
- 对于 OPTIONS 预检请求会自动放行
- 验证通过后会将用户 ID 和权限组信息放入 request attribute 中供后续使用
- 使用 TokenService 来验证 token 的有效性
AvatarProperties.java
用途
AvatarProperties 是用于配置用户头像相关属性的配置类,包括存储路径、文件大小限制和允许的文件类型。
实现细节
- 使用 @ConfigurationProperties 注解,前缀为 "avatar"
- 配置项包括:
- rootPath: 头像存储的根路径(绝对路径)
- maxSize: 最大文件大小,默认为 2MB
- allowedTypes: 允许的文件类型,默认为 jpg,png,jpeg,webp
- 使用 Spring Boot 的类型安全配置属性机制
CorsConfig.java
用途
CorsConfig 是跨域资源共享(CORS)配置类,用于配置允许跨域请求的相关设置。
实现细节
- 实现了 WebMvcConfigurer 接口
- 允许来自 http://localhost:3000 的跨域请求
- 允许 GET、POST、PUT、DELETE、OPTIONS 方法
- 允许所有头部信息
- 暴露 X-Custom-Header、X-Token、Authorization 头部给前端
- 预检请求有效期为 3600 秒
- 允许发送 Cookie 凭据
Knife4jConfig.java
用途
Knife4jConfig 是 API 文档配置类,用于配置 Swagger/OpenAPI 文档的相关信息。
实现细节
- 配置了 API 文档的基本信息:
- 标题:"ChronicDiseaseApp API"
- 描述:"慢病APP 后端接口文档"
- 版本:"v1"
- 联系人信息
- 配置了服务器地址为 http://localhost:8080
- 使用 GroupedOpenApi 扫描 work.baiyun.chronicdiseaseapp 包下的控制器
MybatisPlusConfig.java
用途
MybatisPlusConfig 是 MyBatis-Plus 配置类,用于配置 MyBatis-Plus 的各种插件。
实现细节
- 配置了 MybatisPlusInterceptor 拦截器
- 添加了 OptimisticLockerInnerInterceptor 乐观锁插件
- 用于处理数据库操作中的并发控制
RestTemplateConfig.java
用途
RestTemplateConfig 是 RestTemplate 配置类,用于创建和配置 RestTemplate Bean。
实现细节
- 创建了一个 RestTemplate Bean 实例
- 用于发起 HTTP 请求,例如调用微信接口等
TraceInterceptor.java
用途
TraceInterceptor 是请求跟踪拦截器,用于为每个请求生成唯一的 requestId 和 traceId,便于日志追踪和问题排查。
实现细节
- 实现了 HandlerInterceptor 接口
- 从请求头中获取或生成 requestId 和 traceId
- 将这些 ID 放入 MDC(Mapped Diagnostic Context)中,便于日志输出
- 在请求完成后清理 MDC 中的信息
WeChatProperties.java
用途
WeChatProperties 是微信相关配置属性类,用于配置微信小程序的 appid 和 secret。
实现细节
WebMvcConfig.java
用途
WebMvcConfig 是 Spring MVC 配置类,用于注册和配置各种拦截器。
实现细节
- 注册了 AuthInterceptor 和 TraceInterceptor 两个拦截器
- TraceInterceptor 会拦截所有请求,但排除 Swagger 相关路径
- AuthInterceptor 会拦截所有请求,但排除登录接口和 Swagger 相关路径
- 确保 TraceInterceptor 在 AuthInterceptor 之前执行,以便正确设置 MDC 上下文