从Cloud Foundry中部署的Java应用程序连接到本地系统

2020-08-22 03:31发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)正在春季开发Java后端应用程序...

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

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


正在春季开发Java后端应用程序,该应用程序可以在SAP Cloud Foundry上部署。 我必须连接到内部本地系统。 我已经按照本教程进行了操作: https://help.sap.com /viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/zh-CN/313b215066a8400db461b311e01bd99b.html 以及链接的子教程来进行设置。 但是我仍然无法正确连接到系统,我收到 java.lang.RuntimeException:Http连接失败,状态为403禁止。 我很高兴该系统能够做出响应,但是我无法对自己进行身份验证。 Cloud Connector管理面板显示系统可以访问。 当我进入"目标"选项卡时,我可以看到与系统的连接也成功。 如本教程所述,我的应用程序已绑定到Connectivity和XSUAA服务实例。 这是我用来尝试连接到系统的代码片段

 JSONObject jsonObj =新的JSONObject(System.getenv(" VCAP_SERVICES"));
 JSONArray jsonArr = jsonObj.getJSONArray(" connectivity");
 JSONObject ConnectivityCredentials = jsonArr.getJSONObject(0).getJSONObject(" credentials");

 JSONObject jsonObjXsuaa =新的JSONObject(System.getenv(" VCAP_SERVICES"));
 JSONArray jsonArrXsuaa = jsonObjXsuaa.getJSONArray(" xsuaa");
 JSONObject xsuaaCredentials = jsonArrXsuaa.getJSONObject(0).getJSONObject(" credentials");

 字符串connProxyHost = ConnectivityCredentials.getString(" onpremise_proxy_host");
 int connProxyPort = Integer.parseInt(connectivityCredentials.getString(" onpremise_proxy_http_port"));;
 代理Proxy =新的Proxy(Proxy.Type.HTTP,新的InetSocketAddress(connProxyHost,connProxyPort));

 URL url =新URL(" http://pl-*************.com:8000");

 HttpURLConnection urlConnection =(HttpURLConnection)url.openConnection(proxy);

 字符串clientid = ConnectivityCredentials.getString(" clientid");
 字符串clientsecret = ConnectivityCredentials.getString(" clientsecret");

 URI xsuaaUrl =新URI(xsuaaCredentials.getString(" url"));

 UaaContextFactory factory = UaaContextFactory.factory(xsuaaUrl).authorizePath("/img/oauth/authorize")。tokenPath("/img/oauth/token");
 TokenRequest tokenRequest = factory.tokenRequest();
 tokenRequest.setGrantType(GrantType.CLIENT_CREDENTIALS);
 tokenRequest.setClientId(clientid);
 tokenRequest.setClientSecret(clientsecret);
 UaaContext xsuaaContext = factory.authenticate(tokenRequest);
 CompositeAccessToken accessToken = xsuaaContext.getToken();

 urlConnection.setRequestProperty(" Proxy-Authorization"," Bearer" + accessToken);

 字符串凭据= MessageFormat.format(" {0}:{1}"," USER"," PASSWORD");
 byte [] encodeBytes = Base64.encodeBase64(credentials.getBytes());
 urlConnection.setRequestProperty(" Authorization"," Basic" + new String(encodedBytes)); 
公共静态HttpStatusCodes checkStatus(HttpURLConnection连接)引发IOException {
         HttpStatusCodes httpStatusCode = HttpStatusCodes.fromStatusCode(connection.getResponseCode());
         如果(400 <= httpStatusCode.getStatusCode()&& httpStatusCode.getStatusCode()<= 599){
             抛出新的RuntimeException(" H​​ttp连接失败,状态为" + httpStatusCode.getStatusCode()+"" + httpStatusCode.toString());
         }
         返回httpStatusCode;
 } 

返回的代码是403-禁止,即使我认为我正确提供了所有必需的凭据也是如此。 我想念什么?

4条回答
当学会了学习
2020-08-22 03:47

Oskar,您好,

它非常适合您。 我仍然认为值得研究适用于Java的SAP Cloud SDK,因为它应该抽象出您将调用传递到后端所涉及的所有手动步骤。/p>

一周热门 更多>