微博第三方登录失败----json解析异常

  • 背景:web站点pc端使用第三方登录,qq和微信没问题,微博一直登录失败.
    项目使用Java 的SDK
  • 错误日志:


    error_log.png
  • 分析:明显看到json解析报错,而且跟weibo的sdk有关
  • 依赖关系:


            com.belerweb
            weibo4j-oauth2
            2.1.1-beta2-3

Snipaste_2018-12-20_14-44-31.png

在这里必须吐槽下微博,中央仓库的jar包最近更新是2013年,github的上的源码最近更新是2014年,怀疑微博可能已经弃用Java的sdk不再维护了,当然在服务端实现第三方接口调用本身就不是一个明智的决定

  • bug复现


    Snipaste_2018-12-20_14-53-57.png

    没有抛异常,看下getString()方法


    Snipaste_2018-12-20_14-55-17.png

    很正常,用了toString处理,百思不得其解服务器上为什么报错
    直到我意识到导入的JSONObject的全限定名是org.json.JSONObject,而不是我们熟悉的com.alibaba.fastjson.JSONObject

    微博的sdk依赖了一个org.json的包,这个包的版本是20080701,但是工程中引入了一个org.json的包,版本是20180813


            
            
            


            org.json
            json
            20180813

敲黑板,划重点了

Snipaste_2018-12-20_15-03-45.png

两个版本的getString()方法的实现不同,20180813版中加了一个类型判断,根据key获取值,判断是否为String类型,如果不是直接抛出异常
然而微博返回的数据是这样的

String s = "{\"access_token\":\"2.00Pl2QMCUQ43qBc0de9dcbad2JuHDC\"," +
                "\"uid\":\"2013478597\",\"isRealName\":\"true\",\"expires_in\":2652228,\"remind_in\":\"2652228\"}";

expires_in是number类型,导致接口调用后解析数据时永远报错

  • 总结原因:jar包版本冲突
  • 解决方案:

    com.belerweb
    weibo4j-oauth2
    2.1.1-beta2-3



    
    
    


    org.json
    json
    20080701

实际上下面20080701的不用显式依赖,sdk底层已经依赖了
微博登录失败的问题是解决了,但是第三方登录放在前端使用js来实现才是正解

你可能感兴趣的:(微博第三方登录失败----json解析异常)