jfinal_weixin获取accesstoken的问题.会是一个框架源码本身bug?-服务报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

jfinal_weixin获取accesstoken的问题.会是一个框架源码本身bug?-服务报错

2020-05-31 14:59:30 390 1

"

jfinal-weixin 最新版,及最新测试代码.

<pre class=""brush:java; toolbar: true; auto-links: false;"">package com.jfinal.weixin.sdk.api;

import java.io.IOException;

/** * AccessTokenApi 测试 */ public class AccessTokenApiTest {

public static void main(String[] args) throws IOException {
	ApiConfig ac = new ApiConfig();
	ac.setAppId("wx5d6604a5d4cfaee93");// 这是一个错误的appid
	ac.setAppSecret("ff7971a6fd9dc409d185e81c63025799");// 密码
	// ac.setAppId("wx9803d1188fa5fbda");
	// ac.setAppSecret("db859c968763c582794e7c3d003c3d87");
	ApiConfigKit.setThreadLocalApiConfig(ac);

	AccessToken at = AccessTokenApi.getAccessToken();

	System.out.println(at.getJson());

	if (at.isAvailable()) {
		System.out.println("access_token : " + at.getAccessToken());// token值
		System.out.println("getExpiresIn : " + at.getExpiresIn());// 超时时间,单位为秒
		System.out.println("getJson : " + at.getJson());

	} else {
		System.out.println(at.getErrorCode() + " : " + at.getErrorMsg());
	}
}

}




我测试以上代码,发现会发生死循环.导致jvm宕掉.


然后我断点看一下执行过程.

1. com.jfinal.weixin.sdk.api.AccessTokenApi
getAccessToken会先执行.然后getAccessToken获取到的值无效的话,再去执行refreshAccessToken这个方法.
2.refreshAccessToken 方法原意是重试3次. 就放弃. 但问题是
String json = HttpKit.get(url, queryParas);
result = new AccessToken(json);// 此处代码里面封装了一个apiresult对象.而ApiResult里面有可能会调用refreshAccessTokenIfInvalid方法.然后refreshAccessTokenIfInvalid这个方法又会有机会重新执行

refreshAccessToken .这样死循环就重现了


问题重现很容易,在测试代码里面,把appid输错一个数字就出现了.

请各位看一下,这是不是一个问题?或者有什么好的方法规避一下?


@JFinal

"
取消 提交回答
全部回答(1)
  • montos
    2020-05-31 14:59:46

    "<img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/36.gif"" alt="""" />已经修改,感谢反馈!######<img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/17.gif"" alt="""" />好像有这个问题######

         刚看了一下代码,应该不会有这个问题,refreshAccessToken() 方法中并没有 ApiResult 的操作,AccessToken 中也没有 ApiResult 的操作,所以如果 access token 获取失败三次调用流程就会终止。

        可能是其它原因引起的问题,希望楼主调试一下程序,找到原因后来此再分享一下。

    ######

    //截图重新压缩后,有点模糊了.

    james,就是上面那个执行流程形成了回路.

    不知道把刷新token的方法

    void com.jfinal.weixin.sdk.api.ApiResult.refreshAccessTokenIfInvalid()



    放回这个类本身

    com.jfinal.weixin.sdk.api.AccessToken



    会不会显得更加直接一点.这样ApiResult构造方法变为
    @SuppressWarnings("unchecked")
    	public ApiResult(String jsonStr) {
    		this.json = jsonStr;
    		
    		try {
    			Map<String, Object> temp = JsonUtils.decode(jsonStr, Map.class);
    			this.attrs = temp;
    			
    			// 如果需要,刷新token
    //这里注释掉就OK.
    			//refreshAccessTokenIfInvalid();
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		}
    	}





    ######我本地的代码是没有ApiResult 这部分代码的,刚看了一下是线上的有这个代码,团队开发出了点小状况######我本地是没有的,团队开发出了点小状况 ######嘿嘿,没注意这块,目前已经修改了"
    0 0
相关问答

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 232295浏览量 回答数 170

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 159412浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 340475浏览量 回答数 8

119

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 301049浏览量 回答数 119

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148522浏览量 回答数 22

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 658040浏览量 回答数 24

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 147511浏览量 回答数 31

34

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 283215浏览量 回答数 34

1

回答

foxmail 关联企业邮箱提示邮箱地址或者密码错误

2017-12-30 21:50:39 152003浏览量 回答数 1

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 483393浏览量 回答数 24
+关注
5
文章
5115
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载