【问题标题】:Java client program to consume REST call with authorizationJava 客户端程序以授权使用 REST 调用
【发布时间】:2017-11-18 11:19:49
【问题描述】:

我需要从 Java 代码调用 REST 调用。

我有以下形式的凭据

  1. 身份证
  2. 安全密钥

提供的算法

  1. 获取服务器时间

  2. 使用 ID、安全密钥和服务器时间生成安全令牌

现在授权在下面的表格中

"Authorization": "name id=Id, serverTime=serverTime, securitytoken=securitytoken"

需要一个 java 客户端程序来使用上述授权标头调用此 REST 调用。

我来了

HTTP 响应 401 错误。

请提供正确的方式在表单请求中设置授权标头

Name Id="Id",serverTime="2017-11-18T05:51:05",securityToken="TOKEN"

代码:

package com.rest.client;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

public class Sample {

    public final static String GATEWAY_ID = "Id";

    public final static String KEY = "Key";

    public static void main(String[] args) {

        try {

            HttpURLConnection conn;

            conn = (HttpURLConnection) new URL("https://domain/A/B/72968").openConnection();

            String serverTime = "2017-11-18T10:51:05";

            String securityToken = "TOKEN"; 

            String authorization = "Name Id=\"" + GATEWAY_ID + "\",serverTime=\"" + serverTime + "\",securityToken=\""
                    + securityToken + "\"";

            // Name Id="Id",serverTime="2017-11-18T10:51:05",securityToken="TOKEN"

            conn.addRequestProperty("Authorization", authorization); // Is Header set is correct? It should be part of Request Header. Please correct this

            int status = conn.getResponseCode();

            System.out.println(status);

            BufferedReader br = null;

            StringBuilder body = null;

            String line = "";

            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            body = new StringBuilder();

            while ((line = br.readLine()) != null) {
                body.append(line);
            }

            System.out.println(body);

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

}

错误:

java.io.IOException:服务器返回 HTTP 响应代码:401 用于 URL:https://domain/A/B/72968 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1926) 在 sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1921) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1920) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1490) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 在 com.rest.client.ApplicationClient.main(ApplicationClient.java:48) 原因:java.io.IOException:服务器返回 HTTP 响应代码:401 用于 URL:https://domain/A/B/72968 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 在 java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338) 在 com.rest.client.ApplicationClient.main(ApplicationClient.java:38)

【问题讨论】:

    标签: java rest client consumer


    【解决方案1】:

    尝试以这种方式格式化授权字符串"Basic Base64"。试试

     authorization ="Basic "+new String(new Base64().encode(authorization.getBytes()));
        conn.setRequestProperty("Authorization", authorization);
    

    【讨论】:

    • 感谢您的评论。试过这个,但仍然得到 HTTP 401
    • 所以似乎有问题: String authentication = "Name Id=\"" + GATEWAY_ID + "\",serverTime=\"" + serverTime + "\",securityToken=\" "+ securityToken + "\"";
    • 看起来您只有授权字符串的示例,而不是通过授权的实际参数。
    • 我在调用前用实际参数替换
    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 2014-09-05
    • 2018-09-06
    • 2013-12-25
    • 2018-05-28
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多