mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-11-01 03:25:35 +08:00
修复基于Redis的微信配置的bug
This commit is contained in:
@ -1,21 +1,14 @@
|
|||||||
package me.chanjar.weixin.mp.api;
|
package me.chanjar.weixin.mp.api;
|
||||||
|
|
||||||
import me.chanjar.weixin.common.bean.WxAccessToken;
|
|
||||||
import me.chanjar.weixin.common.util.ToStringUtils;
|
|
||||||
import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder;
|
|
||||||
import redis.clients.jedis.Jedis;
|
import redis.clients.jedis.Jedis;
|
||||||
|
|
||||||
import javax.net.ssl.SSLContext;
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基于Redis的微信配置provider
|
* 基于Redis的微信配置provider
|
||||||
*
|
*
|
||||||
* @author lly835
|
* @author lly835
|
||||||
*/
|
*/
|
||||||
public class WxMpInRedisConfigStorage implements WxMpConfigStorage {
|
@SuppressWarnings("hiding")
|
||||||
|
public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage {
|
||||||
|
|
||||||
private final static String ACCESS_TOKEN_KEY = "wechat_access_token_";
|
private final static String ACCESS_TOKEN_KEY = "wechat_access_token_";
|
||||||
|
|
||||||
@ -23,43 +16,6 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage {
|
|||||||
|
|
||||||
private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_";
|
private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_";
|
||||||
|
|
||||||
protected volatile String appId;
|
|
||||||
protected volatile String secret;
|
|
||||||
protected volatile String partnerId;
|
|
||||||
protected volatile String partnerKey;
|
|
||||||
protected volatile String notifyURL;
|
|
||||||
protected volatile String tradeType;
|
|
||||||
protected volatile String token;
|
|
||||||
protected volatile String accessToken;
|
|
||||||
protected volatile String aesKey;
|
|
||||||
protected volatile long expiresTime;
|
|
||||||
|
|
||||||
protected volatile String oauth2redirectUri;
|
|
||||||
|
|
||||||
protected volatile String httpProxyHost;
|
|
||||||
protected volatile int httpProxyPort;
|
|
||||||
protected volatile String httpProxyUsername;
|
|
||||||
protected volatile String httpProxyPassword;
|
|
||||||
|
|
||||||
protected volatile String jsapiTicket;
|
|
||||||
protected volatile long jsapiTicketExpiresTime;
|
|
||||||
|
|
||||||
protected volatile String cardApiTicket;
|
|
||||||
protected volatile long cardApiTicketExpiresTime;
|
|
||||||
|
|
||||||
protected Lock accessTokenLock = new ReentrantLock();
|
|
||||||
protected Lock jsapiTicketLock = new ReentrantLock();
|
|
||||||
protected Lock cardApiTicketLock = new ReentrantLock();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 临时文件目录
|
|
||||||
*/
|
|
||||||
protected volatile File tmpDirFile;
|
|
||||||
|
|
||||||
protected volatile SSLContext sslContext;
|
|
||||||
|
|
||||||
protected volatile ApacheHttpClientBuilder apacheHttpClientBuilder;
|
|
||||||
|
|
||||||
protected Jedis jedis;
|
protected Jedis jedis;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -67,46 +23,25 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage {
|
|||||||
return jedis.get(ACCESS_TOKEN_KEY.concat(appId));
|
return jedis.get(ACCESS_TOKEN_KEY.concat(appId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Lock getAccessTokenLock() {
|
|
||||||
return this.accessTokenLock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAccessTokenExpired() {
|
public boolean isAccessTokenExpired() {
|
||||||
return getAccessToken() == null ? true : false;
|
return getAccessToken() == null ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void updateAccessToken(WxAccessToken accessToken) {
|
|
||||||
updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {
|
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L;
|
|
||||||
jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken);
|
jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken);
|
||||||
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200);
|
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void expireAccessToken() {
|
public void expireAccessToken() {
|
||||||
this.expiresTime = 0;
|
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getJsapiTicket() {
|
public String getJsapiTicket() {
|
||||||
return this.jsapiTicket;
|
return jedis.get(JSAPI_TICKET_KEY.concat(appId));
|
||||||
}
|
|
||||||
|
|
||||||
public void setJsapiTicket(String jsapiTicket) {
|
|
||||||
this.jsapiTicket = jsapiTicket;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Lock getJsapiTicketLock() {
|
|
||||||
return this.jsapiTicketLock;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -116,16 +51,13 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) {
|
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) {
|
||||||
this.jsapiTicket = jsapiTicket;
|
jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket);
|
||||||
// 预留200秒的时间
|
|
||||||
this.jsapiTicketExpiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L;
|
|
||||||
jedis.set(JSAPI_TICKET_KEY.concat(appId), accessToken);
|
|
||||||
jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
|
jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void expireJsapiTicket() {
|
public void expireJsapiTicket() {
|
||||||
this.jsapiTicketExpiresTime = 0;
|
jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,177 +65,26 @@ public class WxMpInRedisConfigStorage implements WxMpConfigStorage {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getCardApiTicket() {
|
public String getCardApiTicket() {
|
||||||
return this.cardApiTicket;
|
return jedis.get(CARDAPI_TICKET_KEY.concat(appId));
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Lock getCardApiTicketLock() {
|
|
||||||
return this.cardApiTicketLock;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCardApiTicketExpired() {
|
public boolean isCardApiTicketExpired() {
|
||||||
return System.currentTimeMillis() > this.cardApiTicketExpiresTime;
|
return getCardApiTicket() == null ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) {
|
public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) {
|
||||||
this.cardApiTicket = cardApiTicket;
|
jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket);
|
||||||
// 预留200秒的时间
|
|
||||||
this.cardApiTicketExpiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L;
|
|
||||||
jedis.set(CARDAPI_TICKET_KEY.concat(appId), accessToken);
|
|
||||||
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
|
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void expireCardApiTicket() {
|
public void expireCardApiTicket() {
|
||||||
this.cardApiTicketExpiresTime = 0;
|
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAppId() {
|
|
||||||
return this.appId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAppId(String appId) {
|
|
||||||
this.appId = appId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getSecret() {
|
|
||||||
return this.secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSecret(String secret) {
|
|
||||||
this.secret = secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getToken() {
|
|
||||||
return this.token;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setToken(String token) {
|
|
||||||
this.token = token;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getExpiresTime() {
|
|
||||||
return this.expiresTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExpiresTime(long expiresTime) {
|
|
||||||
this.expiresTime = expiresTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAesKey() {
|
|
||||||
return this.aesKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAesKey(String aesKey) {
|
|
||||||
this.aesKey = aesKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getOauth2redirectUri() {
|
|
||||||
return this.oauth2redirectUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOauth2redirectUri(String oauth2redirectUri) {
|
|
||||||
this.oauth2redirectUri = oauth2redirectUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHttpProxyHost() {
|
|
||||||
return this.httpProxyHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHttpProxyHost(String httpProxyHost) {
|
|
||||||
this.httpProxyHost = httpProxyHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getHttpProxyPort() {
|
|
||||||
return this.httpProxyPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHttpProxyPort(int httpProxyPort) {
|
|
||||||
this.httpProxyPort = httpProxyPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHttpProxyUsername() {
|
|
||||||
return this.httpProxyUsername;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHttpProxyUsername(String httpProxyUsername) {
|
|
||||||
this.httpProxyUsername = httpProxyUsername;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHttpProxyPassword() {
|
|
||||||
return this.httpProxyPassword;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHttpProxyPassword(String httpProxyPassword) {
|
|
||||||
this.httpProxyPassword = httpProxyPassword;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return ToStringUtils.toSimpleString(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPartnerId(String partnerId) {
|
|
||||||
this.partnerId = partnerId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPartnerKey(String partnerKey) {
|
|
||||||
this.partnerKey = partnerKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getNotifyURL() {
|
|
||||||
return notifyURL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNotifyURL(String notifyURL) {
|
|
||||||
this.notifyURL = notifyURL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTradeType() {
|
|
||||||
return tradeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTradeType(String tradeType) {
|
|
||||||
this.tradeType = tradeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public File getTmpDirFile() {
|
|
||||||
return this.tmpDirFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTmpDirFile(File tmpDirFile) {
|
|
||||||
this.tmpDirFile = tmpDirFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ApacheHttpClientBuilder getApacheHttpClientBuilder() {
|
|
||||||
return this.apacheHttpClientBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setApacheHttpClientBuilder(ApacheHttpClientBuilder apacheHttpClientBuilder) {
|
|
||||||
this.apacheHttpClientBuilder = apacheHttpClientBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean autoRefreshToken() {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setJedis(Jedis jedis) {
|
public void setJedis(Jedis jedis) {
|
||||||
this.jedis = jedis;
|
this.jedis = jedis;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user