feat(auth): 实现统一认证模块及登录策略

- 新增 ApiResult 统一响应封装类,规范前端接口返回结构
- 添加 AuthController,支持多种登录方式及用户信息接口
- 实现 AuthService,包含登录、登出、密码修改、绑定手机号、重置密码等功能
- 集成图形验证码校验和登录失败锁定机制,增强安全性
- 支持邮箱登录和手机号验证码登录,完善多样化认证策略
- 实现 JWT 令牌签发与吊销,确保会话安全管理
- 配置不同环境 application.yml 及配置,支持多租户和灵活缓存配置
- 增加 .gitignore 规则,屏蔽构建产物、IDE 文件和敏感配置
- 引入 AuthProperties 以配置登录与验证码策略参数
This commit is contained in:
2026-09-23 11:59:45 +08:00
parent 87f36825f8
commit 5e86ebe6b7
134 changed files with 8747 additions and 0 deletions
Executable
+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env bash
#
# 开发环境启动脚本。
#
# 项目要求 Java 25(maven.compiler.release=25),系统默认 JDK 可能是 17,
# 直接跑 ./mvnw 会报 "release version 25 not supported",所以这里固定 JDK。
#
# 用法:
# ./run.sh 使用 dev profile(连本地 MySQL / Redis)
# ./run.sh demo 使用 demo profile(H2 + 内存缓存,零外部依赖)
# ./run.sh dev --server.port=8081
# JDK25_HOME=/path/to/jdk ./run.sh
#
set -euo pipefail
JDK25_HOME="${JDK25_HOME:-$HOME/Library/Java/JavaVirtualMachines/temurin-25.jdk}"
# macOS 的 .jdk 是 bundle 结构,真正的 JDK 根目录在 Contents/Home;
# 也兼容直接指向 JDK 根目录的情况。
if [[ -x "$JDK25_HOME/Contents/Home/bin/java" ]]; then
JDK25_HOME="$JDK25_HOME/Contents/Home"
fi
if [[ ! -x "$JDK25_HOME/bin/java" ]]; then
echo "未找到 JDK 25:$JDK25_HOME" >&2
echo "可通过 JDK25_HOME=/path/to/jdk25 ./run.sh 指定其他位置" >&2
exit 1
fi
export JAVA_HOME="$JDK25_HOME"
export PATH="$JAVA_HOME/bin:$PATH"
cd "$(dirname "$0")"
# JDK 23 起 sun.misc.Unsafe 的内存访问方法被标记为「最终弃用」,
# Netty(来自 Lettuce/Redis)内部仍在使用,启动时会打印 WARNING。
APP_JVM_ARGS="${APP_JVM_ARGS:---sun-misc-unsafe-memory-access=allow}"
PROFILE="${1:-dev}"
if [[ "$PROFILE" == "demo" ]]; then
# demo 需要 H2,而 H2 只在 -Pdemo 时是 runtime 依赖
MVN_PROFILE=(-Pdemo)
shift || true
else
MVN_PROFILE=()
shift || true
fi
echo "JDK: $("$JAVA_HOME/bin/java" -version 2>&1 | head -1)"
echo "Profile: $PROFILE"
if [[ $# -gt 0 ]]; then
exec ./mvnw -q "${MVN_PROFILE[@]}" spring-boot:run \
-Dspring-boot.run.profiles="$PROFILE" \
-Dspring-boot.run.jvmArguments="$APP_JVM_ARGS" \
-Dspring-boot.run.arguments="$*"
fi
exec ./mvnw -q "${MVN_PROFILE[@]}" spring-boot:run \
-Dspring-boot.run.profiles="$PROFILE" \
-Dspring-boot.run.jvmArguments="$APP_JVM_ARGS"