diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 24fa4d8..91d440e 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -32,6 +32,13 @@ jwt: # 过期时间(毫秒),默认 12 小时 expire-millis: ${JWT_EXPIRE_MILLIS:43200000} +# 登录限流(REQ-USR-004 spec § 8 D7):进程内按用户名连续失败计数, +# 达 max-fail 次后锁定 lock-seconds 秒。config-vars 无该键,采用默认值并允许 env 覆盖。 +auth: + login: + max-fail: ${AUTH_LOGIN_MAX_FAIL:5} + lock-seconds: ${AUTH_LOGIN_LOCK_SECONDS:300} + logging: level: com.xly.erp: INFO diff --git a/backend/src/test/java/com/xly/erp/modules/usr/AuthLoginConfigIT.java b/backend/src/test/java/com/xly/erp/modules/usr/AuthLoginConfigIT.java new file mode 100644 index 0000000..be6c9c8 --- /dev/null +++ b/backend/src/test/java/com/xly/erp/modules/usr/AuthLoginConfigIT.java @@ -0,0 +1,31 @@ +package com.xly.erp.modules.usr; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +/** + * REQ-USR-004 T6:登录限流配置项可解析(spec § 8 D7)。 + * + *
@SpringBootTest + test profile 下断言 auth.login.max-fail / auth.login.lock-seconds + * 已声明且能解析为整数(默认 5 / 300),确保 Service @Value 注入不会因缺键启动失败。
+ */ +@SpringBootTest +@ActiveProfiles("test") +class AuthLoginConfigIT { + + @Value("${auth.login.max-fail}") + private int maxFail; + + @Value("${auth.login.lock-seconds}") + private long lockSeconds; + + @Test + void loginConfigDefaultsBound() { + assertThat(maxFail).isEqualTo(5); + assertThat(lockSeconds).isEqualTo(300L); + } +}