Github的OAuth第三方登录-SocketException:Connection Reset

前言

​ 前几日在使用Github的OAuth服务做第三方登录后,在登录过程中偶尔会出现 java.net.SocketException:Connection Reset异常, 但是重启项目就能解决,现在彻底登录不了,一直报Connetction Reset.

查询资料,初步了解异常详情

​ 该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个。

​ 第一个是Connect reset by peer:就是如果一端的Socket被关闭,可能是主动关闭或者因为异常退出而引起的关闭,此时另一端仍发送数据,发送的第一个数据包引发该异常;另一个是Connection reset:一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则会抛出该异常。

总结:在连接断开后的读和写操作引起的。

定位异常
public GithubUser getUser(String accessToken) {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
        .url("https://api.github.com/user?access_token=" + accessToken)
        .build();
    try (Response response = client.newCall(request).execute()) {	//此处出现异常
        String string = response.body().string();
        return JSON.parseObject(string, GithubUser.class);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } 
}
一探究竟

在Github官方文档提到,从11月13日开始,将禁止使用access_token作为查询参数访问API(以用户或GitHub应用程序的身份)

e.g:使用access_token的查询参数

如果您当前正在进行类似于以下内容的API调用

curl "https://api.github.com/user/repos?access_token=my_access_token"

相反,您应该在标头中发送令牌:

curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos
代码修改
<Change>
Request request = new Request.Builder()
    .url("https://api.github.com/user?access_token=" + accessToken)
    .build(); 

<to>
Request request = new Request.Builder()
                .url("https://api.github.com/user")
                .header("Authorization", "token " + accessToken)
                .build();

参考Github相关文章:通过查询参数弃用API身份验证


Thank you.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值