HttpURLConnection响应显示为未经授权

时间:2019-03-26 14:05:03

标签: java

背景:

我们有一个基于Desktop Java的应用程序,该应用程序调用托管在其他服务器上的ASPX页面,该服务器不需要身份验证。

已完成试用:

  • 我发现JRE更新至1.8.0_201之后,此应用开始受到未授权/ 401的保护;当我将其切换回JRE 1.8.0_141时,一切正常。
  • 我已经使用RESTClient触发了相同的操作;我看到请求已发送到网站。

    代码示例:

     //Create connection      
          url = new URL(targetURL);
          connection = (HttpURLConnection)url.openConnection();
          connection.setRequestMethod("POST");
          connection.setRequestProperty("Content-Type", 
               "application/xml");
          connection.setRequestProperty("Content-Language", "en-US");
          connection.setUseCaches (false);
          connection.setDoInput(true);
          connection.setDoOutput(true);
          OutputStreamWriter out;
          out = new OutputStreamWriter(connection.getOutputStream());     
          out.write("<?xml version=\"1.0\"?>\r\n");
          out.write("<methodCall>\r\n");
          out.write("  <project>" + "<![CDATA["+"Pla"+"]]>" + "</project>\r\n");
          out.write("</methodCall>\r\n");     
    

确切错误:

java.io.IOException: Server returned HTTP response code: 401 for URL:
    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)

能帮我解决这个问题吗?


以下是这两个JRE的一些内容: JRE_1.8.0_201: 2019年3月27日下午1:20:45 sun.net.www.protocol.http.HttpURLConnection getServerAuthentication FINER:AuthenticationHeader的服务器身份验证:首选NTLM返回null

JRE_1.8.0_131: ar 27,2019 11:28:35 AM sun.net.www.protocol.http.HttpURLConnection getServerAuthentication FINER:AuthenticationHeader的服务器身份验证:首选NTLM返回的sun.net.www.protocol.http.ntlm.NTLMAuthentication@728938a9 2019年3月27日11:28:35 am sun.net.www.protocol.http.HttpURLConnection plainConnect0

2 个答案:

答案 0 :(得分:0)

我建议您检查User-Agent标头的值。例如,尝试将其设置为“ Mozilla / 5.0”。

答案 1 :(得分:0)

我们在HttpURLConnection和这个特定的1.8.0_201 jre上遇到了类似的问题,该问题带有失败的身份验证和“ Authentication:Basic xxyyy”标头。 我们的情况是服务器首先回答“ 301永久移动”,并且httpurlconnection使用新提供的url正确地重试了请求,但是缺少“ Authentication”标头,因此我们遇到了401。

有趣的事实:像这样设置标题时:

MyLib_Init(1, 2, &(MyLib_InitOptArgs_T){ .optArg2=1.2f });

(请参阅标头名称后的附加空间),它可以工作,因此我认为“ Authentication”标头的过滤器是预期的行为,并且实施不当;-)