From b8a8c6a0c3774ae269583497b2051707f62b188b Mon Sep 17 00:00:00 2001 From: Shenlijun Date: Tue, 30 Jun 2026 21:06:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=20PlusSmsDao=20=E6=94=B9=E4=B8=BA=E6=97=A0?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=B3=A8=E5=86=8C(sms4j=20=E5=8F=97=E9=99=90?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=99=A8=E5=90=AF=E5=8A=A8=E6=9C=9F=E6=8B=89?= =?UTF-8?q?=E5=8F=96=20SmsDao=20=E4=BC=9A=E6=89=93=20ERROR=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 应用 spec §6 预留的 fallback:从 smsDao() 移除 @ConditionalOnProperty, PlusSmsDao 重新无条件注册。原因:sms4j restricted=true 默认下,启动期 SmsBlendsInitializer 注册的 RestrictedProcessor/BlackListProcessor 等 SmsDaoAware 处理器会调 getBean(SmsDao.class),bean 被门控关闭时抛 NoSuchBeanDefinitionException → ERROR 日志 → 被 swallow 后回落默认 dao。 app 能启动但每次 boot 都打一条 ERROR(sms.enabled=false 是 dev+prod 出厂默认)。 PlusSmsDao 无条件在场 → getBean 成功 → 无异常 → 无 ERROR 日志。 软开关语义不变:发短信的真正拦截在 CaptchaController.smsCode 的 enabled 检查。 smsExceptionHandler() 仍保留 @ConditionalOnProperty(只在启用时注册)。 更新 SmsPropertiesTest:shouldAlwaysRegisterSmsDaoButOmitHandlerWhenDisabled 反映 enabled=false 时 SmsDao 在场、Handler 缺席的新语义。 Co-Authored-By: Claude --- .../src/test/java/org/dromara/test/SmsPropertiesTest.java | 6 +++--- .../org/dromara/common/sms/config/SmsAutoConfiguration.java | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/test/java/org/dromara/test/SmsPropertiesTest.java b/ruoyi-admin/src/test/java/org/dromara/test/SmsPropertiesTest.java index 0c5c51ee1..feb3a03e4 100644 --- a/ruoyi-admin/src/test/java/org/dromara/test/SmsPropertiesTest.java +++ b/ruoyi-admin/src/test/java/org/dromara/test/SmsPropertiesTest.java @@ -47,13 +47,13 @@ public class SmsPropertiesTest { } @Tag("dev") - @DisplayName("sms.enabled=false 时不创建 PlusSmsDao / SmsExceptionHandler") + @DisplayName("sms.enabled=false 时仍注册 SmsDao,但不创建 SmsExceptionHandler") @Test - public void shouldNotCreateSmsBeansWhenDisabled() { + public void shouldAlwaysRegisterSmsDaoButOmitHandlerWhenDisabled() { contextRunner .withPropertyValues("sms.enabled=false") .run(context -> { - assertThat(context).doesNotHaveBean(SmsDao.class); + assertThat(context).hasSingleBean(SmsDao.class); assertThat(context).doesNotHaveBean(SmsExceptionHandler.class); }); } diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java index d125b5cd2..fd83b471a 100644 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java @@ -22,7 +22,6 @@ public class SmsAutoConfiguration { @Primary @Bean - @ConditionalOnProperty(prefix = "sms", name = "enabled", havingValue = "true") public SmsDao smsDao() { return new PlusSmsDao(); }