From ad3ad75eecd200aa0e1dcbf1a0c8d5072032347f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=9F=E4=BA=8C=E8=BF=9C?= Date: Thu, 16 Apr 2026 09:35:22 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=E8=B0=83=E6=95=B4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skillhub/auth/local/LocalAuthService.java | 2 +- .../auth/local/LocalAuthServiceTest.java | 24 ++----------------- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth/local/LocalAuthService.java b/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth/local/LocalAuthService.java index 49743328..b64a3028 100644 --- a/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth/local/LocalAuthService.java +++ b/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth/local/LocalAuthService.java @@ -132,7 +132,7 @@ public class LocalAuthService { ensureNotLocked(credential); if (!passwordEncoder.matches(password, credential.getPasswordHash())) { - localAuthFailedService.handleFailedLogin(credential); + localAuthFailedService.handleFailedLogin(credential.getId()); throw invalidCredentials(); } diff --git a/server/skillhub-auth/src/test/java/com/iflytek/skillhub/auth/local/LocalAuthServiceTest.java b/server/skillhub-auth/src/test/java/com/iflytek/skillhub/auth/local/LocalAuthServiceTest.java index d1ef144f..896b0758 100644 --- a/server/skillhub-auth/src/test/java/com/iflytek/skillhub/auth/local/LocalAuthServiceTest.java +++ b/server/skillhub-auth/src/test/java/com/iflytek/skillhub/auth/local/LocalAuthServiceTest.java @@ -122,21 +122,12 @@ class LocalAuthServiceTest { given(userAccountRepository.findById("usr_1")).willReturn(Optional.of(user)); given(passwordEncoder.matches("bad", "encoded")).willReturn(false); - // Mock handleFailedLogin to increment failedAttempts - doAnswer(invocation -> { - LocalCredential cred = invocation.getArgument(0); - cred.setFailedAttempts(cred.getFailedAttempts() + 1); - credentialRepository.save(cred); - return null; - }).when(localAuthFailedService).handleFailedLogin(any(LocalCredential.class)); - assertThatThrownBy(() -> service.login("alice", "bad")) .isInstanceOf(AuthFlowException.class) .extracting("status") .isEqualTo(HttpStatus.UNAUTHORIZED); - assertThat(credential.getFailedAttempts()).isEqualTo(1); - verify(credentialRepository).save(credential); + verify(localAuthFailedService).handleFailedLogin(credential.getId()); } @Test @@ -149,23 +140,12 @@ class LocalAuthServiceTest { given(userAccountRepository.findById("usr_1")).willReturn(Optional.of(user)); given(passwordEncoder.matches("bad", "encoded")).willReturn(false); - // Mock handleFailedLogin to set lockedUntil using CLOCK - doAnswer(invocation -> { - LocalCredential cred = invocation.getArgument(0); - cred.setFailedAttempts(cred.getFailedAttempts() + 1); - cred.setLockedUntil(Instant.now(CLOCK).plus(java.time.Duration.ofMinutes(15))); - credentialRepository.save(cred); - return null; - }).when(localAuthFailedService).handleFailedLogin(any(LocalCredential.class)); - assertThatThrownBy(() -> service.login("alice", "bad")) .isInstanceOf(AuthFlowException.class) .extracting("status") .isEqualTo(HttpStatus.UNAUTHORIZED); - assertThat(credential.getFailedAttempts()).isEqualTo(5); - assertThat(credential.getLockedUntil()).isEqualTo(Instant.now(CLOCK).plusSeconds(15 * 60)); - verify(credentialRepository).save(credential); + verify(localAuthFailedService).handleFailedLogin(credential.getId()); } @Test