From 9bad0ff28043b2e33eedd9c73840ef486c8574a6 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Thu, 26 Mar 2020 23:19:47 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20#1473=20=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=B0=8F=E7=A8=8B=E5=BA=8F=E8=8E=B7=E5=8F=96redis?= =?UTF-8?q?=E9=87=8C=E7=9A=84access=5Ftoken=E5=86=B2=E7=AA=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/impl/WxMaRedisConfigImpl.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java index dfff1ceef..a66ad1fa8 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java @@ -14,6 +14,10 @@ public class WxMaRedisConfigImpl extends AbstractWxMaRedisConfig { private JedisPool jedisPool; + private static final String ACCESS_TOKEN_KEY = "wa:access_token:"; + + private String accessTokenKey; + /** * JedisPool 在此配置类是必须项,使用 WxMaRedisConfigImpl(JedisPool) 构造方法来构造实例 */ @@ -37,4 +41,41 @@ public class WxMaRedisConfigImpl extends AbstractWxMaRedisConfig { protected Jedis getJedis() { return jedisPool.getResource(); } + + /** + * 每个公众号生成独有的存储key. + */ + @Override + public void setAppid(String appId) { + super.setAppid(appId); + this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId); + } + + @Override + public String getAccessToken() { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.accessTokenKey); + } + } + + @Override + public boolean isAccessTokenExpired() { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(accessTokenKey) < 2; + } + } + + @Override + public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(this.accessTokenKey, expiresInSeconds - 200, accessToken); + } + } + + @Override + public void expireAccessToken() { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(this.accessTokenKey, 0); + } + } }