feat: 添加密码验证诊断端点
目的: - 系统化调试密码验证失败问题 - 验证passwordEncoder是否正确工作 - 收集诊断数据以定位根本原因 诊断端点: - GET /api/diagnostic/password - 测试密码: Test@123 - 数据库哈希: $2a$12$... - 返回验证结果和编码器类型
This commit is contained in:
+5
-1
@@ -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)
|
||||
|
||||
+44
@@ -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<ServerResponse> 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
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user