点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)正在春季开发Java后端应用程序...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)正在春季开发Java后端应用程序...
加入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(" Http连接失败,状态为" + httpStatusCode.getStatusCode()+"" + httpStatusCode.toString()); } 返回httpStatusCode; }
返回的代码是403-禁止,即使我认为我正确提供了所有必需的凭据也是如此。 我想念什么?
亲爱的奥斯卡(Oskar)
您似乎遇到了与我相同的问题。 但是,即使在通过直接与目标和连接服务进行交互而使用低级方法时,您似乎也面临此问题。 我希望使用CAP和Cloud SDK可以使事情变得容易。 为此,我创建了项目:
epmbp-consumer-app -java
确实具有一个approuter,它也通过目标和云连接将代理直接公开给后端。 可以毫无问题地调用此URL。 但是,当我从Java模块中调用后端时,遇到了与您相同的问题。 我已经在这里发布了我的问题:
如何将JWT从CAP Java App传递到SAP Cloud SDK Java后端调用
也许您可以尝试我的项目 在您的环境中并在SAP Cloud SDK同事(cc Henning Heitkoetter )的帮助下,它可以正常工作。
最诚挚的问候
格雷戈尔
一周热门 更多>