From 373c1e65cbc3e1efcc3691728bacadd7fc7d95a7 Mon Sep 17 00:00:00 2001 From: jimmyjimmy-sw <57387749+jimmyjimmy-sw@users.noreply.github.com> Date: Mon, 7 Apr 2025 17:47:48 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20#3522=20=E3=80=90=E5=85=AC=E4=BC=97?= =?UTF-8?q?=E5=8F=B7=E3=80=91=E4=BF=AE=E5=A4=8DWxMpMapConfigImpl=E9=9D=99?= =?UTF-8?q?=E6=80=81=E5=B1=9E=E6=80=A7=E5=AD=98=E5=82=A8token=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=A4=9A=E4=B8=AA=E5=AE=9E=E4=BE=8B=E6=97=B6=E5=87=BA?= =?UTF-8?q?=E7=8E=B0token=E6=B2=A1=E6=9C=89=E9=9A=94=E7=A6=BB=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/config/impl/WxMpMapConfigImpl.java | 2 +- .../mp/api/impl/WxMpMapConfigImplTest.java | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMapConfigImplTest.java diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpMapConfigImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpMapConfigImpl.java index cd701d1ef..72e6e615f 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpMapConfigImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpMapConfigImpl.java @@ -15,7 +15,7 @@ public class WxMpMapConfigImpl extends WxMpDefaultConfigImpl { private static final long serialVersionUID = 5311395137835650104L; - private static final ConcurrentHashMap CONCURRENT_HASH_MAP = new ConcurrentHashMap<>(1); + private final ConcurrentHashMap CONCURRENT_HASH_MAP = new ConcurrentHashMap<>(1); private static final String MAP_KEY = "access_token"; diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMapConfigImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMapConfigImplTest.java new file mode 100644 index 000000000..167c0e019 --- /dev/null +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMapConfigImplTest.java @@ -0,0 +1,58 @@ +package me.chanjar.weixin.mp.api.impl; + +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.test.ApiTestModule; +import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl; +import me.chanjar.weixin.mp.util.WxMpConfigStorageHolder; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; + +/** + * 测试 ConcurrentHashMap 保存配置信息 + * @author jimmyjimmy-sw + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMpMapConfigImplTest { + + @Inject + private WxMpService wxService; + + /** + * 测试多租户保存 WxMpMapConfigImpl 到 WxMpService,切换之后能获取到租户各自AppId对应的token + * @throws WxErrorException + */ + @Test + public void testAppidSwitch() throws WxErrorException { + // 保存租户A的配置信息,并获取token + WxMpMapConfigImpl configAppA = new WxMpMapConfigImpl(); + String appidA = "APPID_A"; + configAppA.setAppId(appidA); + configAppA.setSecret("APP_SECRET_A"); + configAppA.useStableAccessToken(true); + String tokenA = "TOKEN_A"; + configAppA.updateAccessToken(tokenA,60 * 60 * 1); + wxService.addConfigStorage(appidA, configAppA); + WxMpConfigStorageHolder.set(appidA); + assertEquals(this.wxService.getAccessToken(),tokenA); + + // 保存租户B的配置信息,并获取token + WxMpMapConfigImpl configAppB = new WxMpMapConfigImpl(); + String appidB = "APPID_B"; + configAppB.setAppId(appidB); + configAppB.setSecret("APP_SECRET_B"); + configAppB.useStableAccessToken(true); + String tokenB = "TOKEN_B"; + configAppB.updateAccessToken(tokenB,60 * 60 * 1); + wxService.addConfigStorage(appidB, configAppB); + WxMpConfigStorageHolder.set(appidB); + assertEquals(this.wxService.getAccessToken(),tokenB); + + // 上下文切换到租户A 获取租户A的token + WxMpConfigStorageHolder.set(appidA); + assertEquals(this.wxService.getAccessToken(),tokenA); + } +}