org.w3c.www.protocol.http.HttpException:连接重置

2020-08-22 17:36发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我对SAP世界来说还很陌生。 我需要您的帮助以了解我当前面临的问题。

我在SAP MII中添加了自定义操作,该操作将与身份验证系统连接并从OAuth获取令牌。 简单的Java可以按预期工作,但是当我添加与自定义操作相同的类时,出现连接重置错误。

日志:

  • 19:30:56.103 [INFO] [GetOauthToken_0]已完成对:XXXXXXXXXX的OAuth令牌
  • 19:30:56.170 [ERROR] [GetOauthToken_0]执行OAuth时发生异常:org.w3c.www.protocol.http.HttpException:连接重置

代码:

HttpURLConnection conn =(HttpURLConnection)url.openConnection(); conn.setDoOutput(true); 字符串authStr = sClientId +":" + sSecret; instance.log( LogLevel.INFO ," OAuth令牌客户端ID:" + sClientId); 字符串encodingAuth = DatatypeConverter.printBase64Binary(authStr.getBytes(" UTF-8")); conn.setRequestMethod(" POST"); conn.setRequestProperty(" Authorization"," Basic" + encodingAuth); conn.setRequestProperty(" Content-Length",Integer.toString(postDataLength)); conn.getOutputStream()。write(postData); instance.log( LogLevel.INFO ,"已完成以下操作的OAuth令牌:" + sClientId); 中的Reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); for(int c;(c = in.read())> = 0;){sb.append((char)c); }

任何输入均受到高度赞赏。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我对SAP世界来说还很陌生。 我需要您的帮助以了解我当前面临的问题。

我在SAP MII中添加了自定义操作,该操作将与身份验证系统连接并从OAuth获取令牌。 简单的Java可以按预期工作,但是当我添加与自定义操作相同的类时,出现连接重置错误。

日志:

  • 19:30:56.103 [INFO] [GetOauthToken_0]已完成对:XXXXXXXXXX的OAuth令牌
  • 19:30:56.170 [ERROR] [GetOauthToken_0]执行OAuth时发生异常:org.w3c.www.protocol.http.HttpException:连接重置

代码:

HttpURLConnection conn =(HttpURLConnection)url.openConnection(); conn.setDoOutput(true); 字符串authStr = sClientId +":" + sSecret; instance.log( LogLevel.INFO ," OAuth令牌客户端ID:" + sClientId); 字符串encodingAuth = DatatypeConverter.printBase64Binary(authStr.getBytes(" UTF-8")); conn.setRequestMethod(" POST"); conn.setRequestProperty(" Authorization"," Basic" + encodingAuth); conn.setRequestProperty(" Content-Length",Integer.toString(postDataLength)); conn.getOutputStream()。write(postData); instance.log( LogLevel.INFO ,"已完成以下操作的OAuth令牌:" + sClientId); 中的Reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); for(int c;(c = in.read())> = 0;){sb.append((char)c); }

任何输入均受到高度赞赏。

付费偷看设置
发送
9条回答
落灬小鱼
1楼-- · 2020-08-22 17:43

为什么不尝试其他方法。 在OAUTH中,我们在应用程序之间交换令牌。 这可以通过使用Java中的servlet来完成,并且可以在SAP MII中轻松开发。

此致

Ankit Gupta

xfwsx85
2楼-- · 2020-08-22 17:56

你好迈克,

我的自定义操作将与身份验证(OAUTH)系统集成,并获取给定客户端ID的令牌。 这是对系统的后调用,并将令牌返回。 查看日志,我可以确定http调用运行良好,但是在读取响应时,它会由于连接重置错误而失败。

我还发现最新的SAP MII已更新了自定义操作(在内置Oauth中)。 但是我使用的是SAP 15.0 SP7补丁1。

我还更新了代码以使用HttpsURLConnection而不是HttpURLConnection。 但是,现在我收到类强制转换异常

13:52:45.679 [错误] [GetOauthToken_0]执行OAuth时发生异常:java.lang.ClassCastException:无法将com.sap.engine.httpdsrclient.protocols.instrumented.https.DSRHttpsURLConnection强制转换为类javax.net.ssl .HttpsURLConnection

追夢秋陽
3楼-- · 2020-08-22 18:07

您要使用"客户端ID"对OKTA进行身份验证吗? 并取回OAUTH令牌。 您从未真正解释过为什么要这样做。 这些信息可能会对人们有所帮助。

吹牛啤
4楼-- · 2020-08-22 17:57

我不是OAUTH的专家,但这听起来确实可以在Netweaver用户管理引擎(UME)中完成。 其他人都知道如何使用此魔术吗?

土豆飞人
5楼-- · 2020-08-22 17:59

您可能想研究使用Netweaver Destinations,但可能会遇到相同的TLS版本问题。

您可以 还要围绕Netweaver Java API进行研究,有时SAP拥有自己的自定义功能来处理可能还没有该核心JRE版本的东西等等。

在处理自定义操作时,有一个 没什么可考虑的。

  1. 在开发环境中尝试并使用与目标系统相同的 exact Java版本。
  2. 相同 适用于您可能要在服务器上使用的库版本。
  3. 您的自定义操作将在服务器上运行,并且与Netweaver运行的任何系统用户/上下文一样。
  4. 仅供参考,您的"无法将类com.sap.engine.httpdsrclient.protocols.instrumented.https.DSRHttpsURLConnection强制转换为类javax.net.ssl.HttpsURLConnection"错误通常是由于Java API发生了更改 一些 指向HttpsURLConnection,因此请确保所有版本均已排序。

    致谢,
    Christian

callcenter油条
6楼-- · 2020-08-22 17:40

感谢您的回复,迈克。 我认为这不能通过用户管理来完成。 因为据我所知,用户管理将控制所有可以登录系统并进行所有SAP MII系统身份验证的人员,因此,如果我的理解有误,请更正我。 但就我而言,我正在连接到外部OAUTH系统(通过进行HTTP POST调用),并尝试获取具有凭据的令牌。 因此,这只是简单的Java HTTP Client应用程序。

一周热门 更多>