多微信号情况下的accessToken
@JFinal 你好,想跟你请教个问题:
我把AccessTokenApi 这个类做了修改,原先的写法在多账号的时候貌似没有将accessToken独立开, 可能会出现A微信号生成的accessToken-A 在内存中 ,B微信号获取accessToken的时候accessToken-A还未过期就会被拿来使用了,造成拿错accessToken的窘况.
这个是想做多账号支持的时候想去看老大的代码怎么区分accessToken , 可惜没找到, 所以自己做了修改, 不知是不是有其他地方有做这样机制,这样修改是否有这个必要.
以下是修改后的代码:
//防止多微信号的时候accessTokens串起来,将其改成map存在内存中 private static Map<String,AccessToken> accessTokens = new HashMap<String,AccessToken>(); public static AccessToken getAccessToken() { ApiConfig ac = ApiConfigKit.getApiConfig(); AccessToken accessToken = accessTokens.get(ac.getAppId()); if (accessToken != null && accessToken.isAvailable()) return accessToken; refreshAccessToken(); accessToken = accessTokens.get(ac.getAppId()); return accessToken; } public static void refreshAccessToken() { requestAccessToken(); } private static synchronized void requestAccessToken() { AccessToken result = null; ApiConfig ac = ApiConfigKit.getApiConfig(); for (int i=0; i<3; i++) { String appId = ac.getAppId(); String appSecret = ac.getAppSecret(); Map<String, String> queryParas = ParaMap.create("appid", appId).put("secret", appSecret).getData(); String json = HttpKit.get(url, queryParas); result = new AccessToken(json); if (result.isAvailable()) break; } accessTokens.put(ac.getAppId(), result); }
这是修改前的代码:
private static AccessToken accessToken; public static AccessToken getAccessToken() { if (accessToken != null && accessToken.isAvailable()) return accessToken; refreshAccessToken(); return accessToken; } public static void refreshAccessToken() { accessToken = requestAccessToken(); } private static synchronized AccessToken requestAccessToken() { AccessToken result = null; ApiConfig ac = ApiConfigKit.getApiConfig(); for (int i=0; i<3; i++) { String appId = ac.getAppId(); String appSecret = ac.getAppSecret(); Map<String, String> queryParas = ParaMap.create("appid", appId).put("secret", appSecret).getData(); String json = HttpKit.get(url, queryParas); result = new AccessToken(json); if (result.isAvailable()) break; } return result; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
谢谢波总~原来已经1.3了~ 我看的还是1.2的源码, 1.3已经改过来了