Day1 项目启动记录(KnowledgeDock)

Day1 项目启动记录(KnowledgeDock)

目标:完成"登录 -> 拿 token -> 管理端接口鉴权放行",并提供一个可用的前端管理端雏形。

1. 使用的技术栈

后端

  • Java 11
  • Spring Boot 2.7.3
  • Spring MVC(Rest API)
  • MyBatis(XML Mapper)
  • MySQL + Druid
  • PageHelper(分页插件,Day1 仅完成可启动的依赖版本)
  • Redis/Cache/WebSocket/POI/OSS(已引入依赖,Day1 未展开)
  • JWT(jjwt 0.9.1):登录签发 token、拦截器验签
  • Knife4j(Springfox 3.0.0 体系):接口文档 doc.html

前端

  • Vue 3 + Vite
  • vue-router 4
  • 纯 CSS(不依赖 UI 框架)

2. 已完成的功能(Day1 验收点)

2.1 健康检查

  • 接口:GET /api/health
  • 作用:验证服务可启动与基础路由可用

2.2 统一返回与统一异常

  • 统一返回:Result<T>{ code, message, data }
  • 统一异常:BizException + GlobalExceptionHandler
    • 业务异常抛出后统一转成 Result.fail(...)

2.3 MyBatis 跑通(按 username 查用户)

  • 表:sys_user
  • Mapper:SysUserMapper.selectByUsername(username)
  • XML:resources/mapper/SysUserMapper.xml
  • 实体:SysUser

2.4 登录(JWT)

  • 接口:POST /api/admin/auth/login
  • 入参:{ username, password }
  • 校验:数据库查用户 + MD5(password)password_hash 比对
  • 返回:{ token }

2.5 JWT 鉴权拦截

  • 拦截:/api/admin/**
  • 放行:/api/admin/auth/login/api/health、Swagger/Knife4j 相关路径
  • 从请求头读取:token: <jwt>
  • 验签失败:抛 BizException(ErrorCode.UNAUTHORIZED),最终返回 40100

2.6 受保护示例接口

  • 接口:GET /api/admin/menus
  • 作用:验证鉴权是否生效
    • 不带 token:失败(40100)
    • 带 token:成功(code=0,data=[])

2.7 Swagger/Knife4j 注解

  • 在 Controller 上增加 @Api / @ApiOperation,便于接口展示

2.8 前端管理端雏形(Vue3)

  • 位置:E:\Java\Knowledge\Knowledge_front
  • 页面:登录页 / 健康检查页 / 菜单页(示例)
  • 通过 Vite proxy 代理 /apihttp://localhost:8080,避免 CORS

3. 关键实现说明(简述)

3.1 JWT 配置与工具封装

  • 配置项:
    • application.ymljwt.ttl-ms
    • application-dev.ymljwt.secret
  • 读取方式:JwtProperties@ConfigurationProperties(prefix = "jwt")
  • 工具类:JwtUtil(生成/解析 claims)

3.2 登录流程

  1. Controller 接收 LoginRequest
  2. Service 调 SysUserMapper.selectByUsername
  3. MD5(password) 对比 password_hash
  4. 生成 token 返回

3.3 鉴权流程

  1. WebMvcConfig 注册 JwtInterceptor
  2. 请求进入 /api/admin/** 时先执行 preHandle
  3. 解析请求头 token
  4. 解析失败抛 UNAUTHORIZED

4. 遇到的问题与解决方式

4.1 DataSource 启动失败:缺少 url/driver

  • 现象:Failed to configure a DataSource: 'url' attribute is not specified
  • 解决:补齐 application-dev.yml 的 MySQL 数据源配置

4.2 PageHelper 循环依赖导致启动失败

  • 现象:PageHelperAutoConfiguration ... circular reference
  • 解决:升级 pagehelper-spring-boot-starter1.4.7(与 Boot 2.7 更兼容)

4.3 Springfox/Knife4j NPE(documentationPluginsBootstrapper)

  • 现象:Failed to start bean 'documentationPluginsBootstrapper' + NPE
  • 解决:application.yml 增加:
    • spring.mvc.pathmatch.matching-strategy: ant_path_matcher

4.4 Jackson 版本冲突风险

  • 现象:POJO 模块显式引入过老的 jackson-databind:2.9.2
  • 解决:移除显式版本,使用 Spring Boot BOM 管理的 2.13.x

4.5 MyBatis 实体没有 setter 导致映射失败

  • 现象:查询时可能报 no setter for property
  • 解决:给 SysUser 增加 Lombok @Data

4.6 YAML 缩进/乱码导致配置读取异常

  • 现象:配置无法加载/字段读取不到
  • 解决:重写 application.yml 为规范缩进、可解析的格式

5. 如何启动与验证

5.1 初始化数据库

  • 创建库:knowledge_dock
  • 执行:day1/sql/001_sys_user.sql(建表 + 插入 admin 用户)

5.2 启动后端

  • 启动类:KnowledgeDockApplication
  • 检查:GET http://localhost:8080/api/health -> ok

5.3 验证登录与鉴权

  1. 登录
  • POST http://localhost:8080/api/admin/auth/login
  • Body:{ "username": "admin", "password": "admin123" }
  1. 访问受保护接口
  • GET http://localhost:8080/api/admin/menus
    • 不带请求头 token:返回 40100
    • 带请求头 token: <jwt>:返回 code=0 data=[]

5.4 启动前端

  • 目录:E:\Java\Knowledge\Knowledge_front
  • 命令:
    • npm i
    • npm run dev
  • 地址:http://localhost:5173
相关推荐
belldeep2 小时前
Java:Tomcat 9, flexmark 0.6 和 mermaid.min.js 10.9 实现 Markdown 中 Mermaid 图表的渲染
java·tomcat·mermaid·flexmark
安全检测中2 小时前
序列化与反序列化学习
java·开发语言
我是咸鱼不闲呀2 小时前
力扣Hot100系列18(Java)——[技巧]总结 (只出现一次的数字,多数元素,颜色分类,下一个排列,寻找重复数)
java·算法·leetcode
_周游2 小时前
Java8 API文档搜索引擎_优化构建索引速度
java·服务器·搜索引擎·intellij-idea
北凉军2 小时前
IDEA中热部署插件JRebel激活失败404
java·ide·intellij-idea
乐观甜甜圈2 小时前
在Windows系统上hprof文件是否可以删除
java
野犬寒鸦2 小时前
从零起步学习并发编程 || 第二章:多线程与死锁在项目中的应用示例
java·开发语言·数据库·后端·学习
张np2 小时前
java进阶-Zookeeper
java·zookeeper·java-zookeeper
long3162 小时前
合并排序 merge sort
java·数据结构·spring boot·算法·排序算法