|
|
@@ -1,12 +1,12 @@ |
|
|
|
package me.chanjar.weixin.cp.api; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
import me.chanjar.weixin.common.bean.WxAccessToken; |
|
|
|
import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder; |
|
|
|
import redis.clients.jedis.Jedis; |
|
|
|
import redis.clients.jedis.JedisPool; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
/** |
|
|
|
* Jedis client implementor for wechat config storage |
|
|
|
* |
|
|
@@ -14,254 +14,246 @@ import redis.clients.jedis.JedisPool; |
|
|
|
*/ |
|
|
|
public class WxCpJedisConfigStorage implements WxCpConfigStorage { |
|
|
|
|
|
|
|
/* Redis keys here */ |
|
|
|
private static final String ACCESS_TOKEN_KEY = "WX_CP_ACCESS_TOKEN"; |
|
|
|
private static final String ACCESS_TOKEN_EXPIRES_TIME_KEY = "WX_CP_ACCESS_TOKEN_EXPIRES_TIME"; |
|
|
|
private static final String JS_API_TICKET_KEY = "WX_CP_JS_API_TICKET"; |
|
|
|
private static final String JS_API_TICKET_EXPIRES_TIME_KEY = "WX_CP_JS_API_TICKET_EXPIRES_TIME"; |
|
|
|
|
|
|
|
private volatile String corpId; |
|
|
|
private volatile String corpSecret; |
|
|
|
|
|
|
|
private volatile String token; |
|
|
|
private volatile String aesKey; |
|
|
|
private volatile Integer agentId; |
|
|
|
|
|
|
|
private volatile String oauth2redirectUri; |
|
|
|
|
|
|
|
private volatile String httpProxyHost; |
|
|
|
private volatile int httpProxyPort; |
|
|
|
private volatile String httpProxyUsername; |
|
|
|
private volatile String httpProxyPassword; |
|
|
|
|
|
|
|
private volatile File tmpDirFile; |
|
|
|
|
|
|
|
private volatile ApacheHttpClientBuilder apacheHttpClientBuilder; |
|
|
|
|
|
|
|
/* Redis clients pool */ |
|
|
|
private final JedisPool jedisPool; |
|
|
|
|
|
|
|
public WxCpJedisConfigStorage(String host, int port) { |
|
|
|
this.jedisPool = new JedisPool(host, port); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* This method will be destroy jedis pool |
|
|
|
*/ |
|
|
|
public void destroy() { |
|
|
|
this.jedisPool.destroy(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getAccessToken() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
return jedis.get(ACCESS_TOKEN_KEY); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isAccessTokenExpired() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(ACCESS_TOKEN_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return System.currentTimeMillis() > expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void expireAccessToken() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(ACCESS_TOKEN_EXPIRES_TIME_KEY, "0"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateAccessToken(WxAccessToken accessToken) { |
|
|
|
this.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(ACCESS_TOKEN_KEY, accessToken); |
|
|
|
|
|
|
|
jedis.set(ACCESS_TOKEN_EXPIRES_TIME_KEY, |
|
|
|
(System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L) + ""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getJsapiTicket() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
return jedis.get(JS_API_TICKET_KEY); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isJsapiTicketExpired() { |
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(JS_API_TICKET_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return System.currentTimeMillis() > expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void expireJsapiTicket() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(JS_API_TICKET_EXPIRES_TIME_KEY, "0"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { |
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(JS_API_TICKET_KEY, jsapiTicket); |
|
|
|
|
|
|
|
jedis.set(JS_API_TICKET_EXPIRES_TIME_KEY, |
|
|
|
(System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L + "")); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getCorpId() { |
|
|
|
return this.corpId; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getCorpSecret() { |
|
|
|
return this.corpSecret; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Integer getAgentId() { |
|
|
|
return this.agentId; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getToken() { |
|
|
|
return this.token; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getAesKey() { |
|
|
|
return this.aesKey; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public long getExpiresTime() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(ACCESS_TOKEN_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return 0L; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getOauth2redirectUri() { |
|
|
|
return this.oauth2redirectUri; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getHttpProxyHost() { |
|
|
|
return this.httpProxyHost; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public int getHttpProxyPort() { |
|
|
|
return this.httpProxyPort; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getHttpProxyUsername() { |
|
|
|
return this.httpProxyUsername; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getHttpProxyPassword() { |
|
|
|
return this.httpProxyPassword; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public File getTmpDirFile() { |
|
|
|
return this.tmpDirFile; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public ApacheHttpClientBuilder getApacheHttpClientBuilder() { |
|
|
|
return this.apacheHttpClientBuilder; |
|
|
|
} |
|
|
|
|
|
|
|
public void setCorpId(String corpId) { |
|
|
|
this.corpId = corpId; |
|
|
|
} |
|
|
|
|
|
|
|
public void setCorpSecret(String corpSecret) { |
|
|
|
this.corpSecret = corpSecret; |
|
|
|
} |
|
|
|
|
|
|
|
public void setToken(String token) { |
|
|
|
this.token = token; |
|
|
|
} |
|
|
|
|
|
|
|
public void setAesKey(String aesKey) { |
|
|
|
this.aesKey = aesKey; |
|
|
|
} |
|
|
|
|
|
|
|
public void setAgentId(Integer agentId) { |
|
|
|
this.agentId = agentId; |
|
|
|
} |
|
|
|
|
|
|
|
// ============================ Setters below |
|
|
|
|
|
|
|
public void setOauth2redirectUri(String oauth2redirectUri) { |
|
|
|
this.oauth2redirectUri = oauth2redirectUri; |
|
|
|
} |
|
|
|
|
|
|
|
public void setHttpProxyHost(String httpProxyHost) { |
|
|
|
this.httpProxyHost = httpProxyHost; |
|
|
|
} |
|
|
|
|
|
|
|
public void setHttpProxyPort(int httpProxyPort) { |
|
|
|
this.httpProxyPort = httpProxyPort; |
|
|
|
} |
|
|
|
|
|
|
|
public void setHttpProxyUsername(String httpProxyUsername) { |
|
|
|
this.httpProxyUsername = httpProxyUsername; |
|
|
|
} |
|
|
|
|
|
|
|
public void setHttpProxyPassword(String httpProxyPassword) { |
|
|
|
this.httpProxyPassword = httpProxyPassword; |
|
|
|
} |
|
|
|
|
|
|
|
public void setTmpDirFile(File tmpDirFile) { |
|
|
|
this.tmpDirFile = tmpDirFile; |
|
|
|
} |
|
|
|
|
|
|
|
public void setApacheHttpClientBuilder(ApacheHttpClientBuilder apacheHttpClientBuilder) { |
|
|
|
this.apacheHttpClientBuilder = apacheHttpClientBuilder; |
|
|
|
} |
|
|
|
/* Redis keys here */ |
|
|
|
private static final String ACCESS_TOKEN_KEY = "WX_CP_ACCESS_TOKEN"; |
|
|
|
private static final String ACCESS_TOKEN_EXPIRES_TIME_KEY = "WX_CP_ACCESS_TOKEN_EXPIRES_TIME"; |
|
|
|
private static final String JS_API_TICKET_KEY = "WX_CP_JS_API_TICKET"; |
|
|
|
private static final String JS_API_TICKET_EXPIRES_TIME_KEY = "WX_CP_JS_API_TICKET_EXPIRES_TIME"; |
|
|
|
/* Redis clients pool */ |
|
|
|
private final JedisPool jedisPool; |
|
|
|
private volatile String corpId; |
|
|
|
private volatile String corpSecret; |
|
|
|
private volatile String token; |
|
|
|
private volatile String aesKey; |
|
|
|
private volatile Integer agentId; |
|
|
|
private volatile String oauth2redirectUri; |
|
|
|
private volatile String httpProxyHost; |
|
|
|
private volatile int httpProxyPort; |
|
|
|
private volatile String httpProxyUsername; |
|
|
|
private volatile String httpProxyPassword; |
|
|
|
private volatile File tmpDirFile; |
|
|
|
private volatile ApacheHttpClientBuilder apacheHttpClientBuilder; |
|
|
|
|
|
|
|
public WxCpJedisConfigStorage(String host, int port) { |
|
|
|
this.jedisPool = new JedisPool(host, port); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* This method will be destroy jedis pool |
|
|
|
*/ |
|
|
|
public void destroy() { |
|
|
|
this.jedisPool.destroy(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getAccessToken() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
return jedis.get(ACCESS_TOKEN_KEY); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isAccessTokenExpired() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(ACCESS_TOKEN_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return System.currentTimeMillis() > expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void expireAccessToken() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(ACCESS_TOKEN_EXPIRES_TIME_KEY, "0"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateAccessToken(WxAccessToken accessToken) { |
|
|
|
this.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(ACCESS_TOKEN_KEY, accessToken); |
|
|
|
|
|
|
|
jedis.set(ACCESS_TOKEN_EXPIRES_TIME_KEY, |
|
|
|
(System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L) + ""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getJsapiTicket() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
return jedis.get(JS_API_TICKET_KEY); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean isJsapiTicketExpired() { |
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(JS_API_TICKET_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return System.currentTimeMillis() > expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void expireJsapiTicket() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(JS_API_TICKET_EXPIRES_TIME_KEY, "0"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { |
|
|
|
|
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
jedis.set(JS_API_TICKET_KEY, jsapiTicket); |
|
|
|
|
|
|
|
jedis.set(JS_API_TICKET_EXPIRES_TIME_KEY, |
|
|
|
(System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L + "")); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getCorpId() { |
|
|
|
return this.corpId; |
|
|
|
} |
|
|
|
|
|
|
|
public void setCorpId(String corpId) { |
|
|
|
this.corpId = corpId; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getCorpSecret() { |
|
|
|
return this.corpSecret; |
|
|
|
} |
|
|
|
|
|
|
|
public void setCorpSecret(String corpSecret) { |
|
|
|
this.corpSecret = corpSecret; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Integer getAgentId() { |
|
|
|
return this.agentId; |
|
|
|
} |
|
|
|
|
|
|
|
public void setAgentId(Integer agentId) { |
|
|
|
this.agentId = agentId; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getToken() { |
|
|
|
return this.token; |
|
|
|
} |
|
|
|
|
|
|
|
public void setToken(String token) { |
|
|
|
this.token = token; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getAesKey() { |
|
|
|
return this.aesKey; |
|
|
|
} |
|
|
|
|
|
|
|
public void setAesKey(String aesKey) { |
|
|
|
this.aesKey = aesKey; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public long getExpiresTime() { |
|
|
|
try (Jedis jedis = this.jedisPool.getResource()) { |
|
|
|
String expiresTimeStr = jedis.get(ACCESS_TOKEN_EXPIRES_TIME_KEY); |
|
|
|
|
|
|
|
if (expiresTimeStr != null) { |
|
|
|
Long expiresTime = Long.parseLong(expiresTimeStr); |
|
|
|
return expiresTime; |
|
|
|
} |
|
|
|
|
|
|
|
return 0L; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@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; |
|
|
|
} |
|
|
|
|
|
|
|
// ============================ Setters below |
|
|
|
|
|
|
|
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 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; |
|
|
|
} |
|
|
|
|
|
|
|
} |