SpringSecurity获取token时偶尔出现Invalid Http response
问题描述
现在有一个SpringBoot程序使用SpringSecurity安全控件,程序的开发已经接近完成,但是近期发现一个偶尔会发生的异常。当用户登录时有很小的几率失败,正常情况下用户录入登录信息前端会把登录信息提供给后端,由后端通过Http请求SpringSecurity的/oauth/token接口验证登录信息是否正确并获取token。
问题就发生在获取token时,个别情况下登录信息正确但是SpringSecurity没有返回正确的响应信息,导致程序异常。
开发环境
- SpringBoot 2.0.4.RELEASE
- SpringSecurity 2.3.3.RELEASE
- hutool 5.7.5
后端代码
// 请求地址
String url = "http://127.0.0.1:8080/***/oauth/token";
// 请求参数
Map<String, Object> paramMap;// 省略具体参数
String res = HttpUtil.post(url, paramMap);
JSON.parseObject(res);
错误信息
Caused by: java.io.IOException: Invalid Http response
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at cn.hutool.http.HttpConnection.getInputStream(HttpConnection.java:417)
at cn.hutool.http.HttpInputStream.init(HttpInputStream.java:81)
... 119 more
Caused by: java.io.IOException: Invalid Http response
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at cn.hutool.http.HttpConnection.responseCode(HttpConnection.java:470)
at cn.hutool.http.HttpResponse.init(HttpResponse.java:420)
... 117 more
尝试方案与结果
- 内存分配
调整并测试后发现,内存分配越小出现的几率越低,但是分配更多的内存只能减少几率但是依然无法彻底解决,当前最好的情况大约500此请求出现一次错误。
期待
求问这个问题的出现原因!跪求解决方案!!!
万分感谢!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看错误信息,cn.hutool.http.HttpConnection.responseCode(HttpConnection.java:470),如果有代码显式的调用这个api,再debug走走呗,看看是哪里的问题
服务端的代码怎么写的?谷歌了一下貌似就你遇到了这个问题
返回的状态码为-1,被认定为不是一个有效的http请求,有说链接中断,设置keepAlive的,有说没有上网许可的,有说参数传错了的,五花八门。顺便一说,spring securtiy 是集成了oauth2的,根本不需要自己请求,都有自己的一套流程,你配置小url就行了。框架自己请求并放入上下文中。自己请求很多情况都是画蛇添足,后续工作跟本自己就处理不好。