# 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。 ### 实现细节 - 使用 @ConfigurationProperties 注解,前缀为 "wechat" - 包含 appid 和 secret 两个配置项 - 用于微信登录等相关功能 ## WebMvcConfig.java ### 用途 WebMvcConfig 是 Spring MVC 配置类,用于注册和配置各种拦截器。 ### 实现细节 - 注册了 AuthInterceptor 和 TraceInterceptor 两个拦截器 - TraceInterceptor 会拦截所有请求,但排除 Swagger 相关路径 - AuthInterceptor 会拦截所有请求,但排除登录接口和 Swagger 相关路径 - 确保 TraceInterceptor 在 AuthInterceptor 之前执行,以便正确设置 MDC 上下文