这些天在使用新浪微博的API和SDK写些东东,客服告诉我要使用 oauth2 版本,因为第1代已经申请不到appKey了,于是我下载了一个java版本的sdk。下载地址:http://code.google.com/p/weibo4j/downloads/detail?name=weibo4j-oauth2-beta2.0.zip
以下,使用 weibo4j-oauth2-beta2.0.zip 的过程中发现的问题:
// 从新浪微博的登录页面callback后的处理
String code = request.getParameter("code");
// 第1步
Oauth oauth = new Oauth();
AccessToken token = oauth.getAccessTokenByCode(code);
// 第2步
Weibo weibo = new Weibo();
weibo.setToken(token.getAccessToken());
// 第3步
Account account = new Account();
// 以下是取得授权用户(也就是登录用户)的ID
account.getUid();
/**
可以看到问题出在第2步到第3步之间没有任何引用的关连,通过查看sdk的代码,发现其中的关连是Weibo.client ,而client的声明是public static HttpClient client = new HttpClient();
并且是通过以下方法对client中的token进行赋值:
public synchronized void setToken(String token) {
client.setToken(token);
}
首先,我没看懂setToken方法用到的synchronized 是起到什么作用……好吧,我承认学艺不精。
其次,从第2步到第3步之间的过渡如果没有进行线程同步,那么会出现account.getUid() 取得其它用户的uid的问题,至于怎么出现的你懂的……我擦,我表示“尼玛,坑爹呀”。
补充,如果这个sdk用于客户端并只允许单用户登录那就不存在什么问题了,可这个偏偏是通过 request.getParameter("code"); 获得token的……至此,我觉得我技术生涯的BUG都弱爆了。
所以,蛋粹一地,拜托了!因为亿万人在看……最后,新浪微博API哥,太浪会出大问题的,当心VT二连让你超鬼。
*/
我表示并没有故意诋毁之意。只是以此来提醒正在使用或准备开发新浪微博app的弟兄们。
注:博文下方的下载链接是weibo4j-oauth2-beta2.0.zip(2012/04/09)文件快照。