From 0b0c2527a5443e789174751bcb7c3f60b17db751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Sun, 5 Apr 2026 07:58:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E8=AF=8A=E6=96=AD=E7=AB=AF=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 目的: - 系统化调试密码验证失败问题 - 验证passwordEncoder是否正确工作 - 收集诊断数据以定位根本原因 诊断端点: - GET /api/diagnostic/password - 测试密码: Test@123 - 数据库哈希: $2a$12$... - 返回验证结果和编码器类型 --- .../manage/app/config/SystemRouter.java | 6 ++- .../auth/PasswordDiagnosticHandler.java | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/auth/PasswordDiagnosticHandler.java diff --git a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/SystemRouter.java b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/SystemRouter.java index 3008c76..497db96 100644 --- a/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/SystemRouter.java +++ b/novalon-manage-api/manage-app/src/main/java/cn/novalon/manage/app/config/SystemRouter.java @@ -49,9 +49,13 @@ public class SystemRouter { SysNoticeHandler noticeHandler, SysUserMessageHandler messageHandler, SysFileHandler fileHandler, - SysPermissionHandler permissionHandler) { + SysPermissionHandler permissionHandler, + cn.novalon.manage.sys.handler.auth.PasswordDiagnosticHandler passwordDiagnosticHandler) { return route() + // ========== 诊断路由 ========== + .GET("/api/diagnostic/password", passwordDiagnosticHandler::diagnose) + // ========== 字典路由 ========== .GET("/api/dictionaries", dictionaryHandler::getAllDictionaries) .GET("/api/dictionaries/{id}", dictionaryHandler::getDictionaryById) diff --git a/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/auth/PasswordDiagnosticHandler.java b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/auth/PasswordDiagnosticHandler.java new file mode 100644 index 0000000..7ede11d --- /dev/null +++ b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/auth/PasswordDiagnosticHandler.java @@ -0,0 +1,44 @@ +package cn.novalon.manage.sys.handler.auth; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +@Component +public class PasswordDiagnosticHandler { + + private static final Logger logger = LoggerFactory.getLogger(PasswordDiagnosticHandler.java); + private final PasswordEncoder passwordEncoder; + + public PasswordDiagnosticHandler(PasswordEncoder passwordEncoder) { + this.passwordEncoder = passwordEncoder; + logger.info("PasswordDiagnosticHandler initialized with encoder: {}", passwordEncoder.getClass().getName()); + } + + public Mono diagnose(ServerRequest request) { + String testPassword = "Test@123"; + String dbHash = "$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C"; + + logger.info("=== Password Diagnostic Start ==="); + logger.info("Test password: {}", testPassword); + logger.info("DB hash: {}", dbHash); + logger.info("Encoder type: {}", passwordEncoder.getClass().getName()); + + boolean matches = passwordEncoder.matches(testPassword, dbHash); + + logger.info("Match result: {}", matches); + logger.info("=== Password Diagnostic End ==="); + + return ServerResponse.ok() + .bodyValue(java.util.Map.of( + "testPassword", testPassword, + "dbHash", dbHash, + "encoderType", passwordEncoder.getClass().getName(), + "matches", matches + )); + } +}