Curl с аутентификацией для aem [duplicate]

Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера

28
задан Dave Sims 11 August 2011 в 03:13
поделиться

6 ответов

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));  //Java 8
connection.setRequestProperty("Authorization", "Basic "+encoded);

Затем используйте соединение как обычно.

Если вы используете Java 7 или ниже, вам понадобится метод для кодирования String для Base64, например:

byte[] message = (username+":"+password).getBytes("UTF-8");
String encoded = javax.xml.bind.DatatypeConverter.printBase64Binary(message);

Да, это все, что вам нужно сделать, чтобы использовать Basic Auth. Код, указанный выше, чтобы установить свойство Request, должен быть выполнен сразу после открытия соединения и до получения входных или выходных потоков.

82
ответ дан dontocsata 18 August 2018 в 20:16
поделиться
  • 1
    Да, это то, что я делаю сейчас (см. Править). – Dave Sims 11 August 2011 в 03:13
  • 2
    Да, это все, что вам нужно. – dontocsata 11 August 2011 в 17:06
  • 3
    Просто немного ПРЕДУПРЕЖДЕНИЕ для любого, кто использует android.util.Base64 для кодирования для этого, флаг DEFAULT добавит символ новой строки и, таким образом, создаст вам недопустимые HTTP-запросы, в результате чего вы потратите часы на свое время, пытаясь понять, почему HTTP серверы, такие как nginx, сообщают коды ошибок HTTP 400 для ваших запросов! Поэтому убедитесь, что вы используете флаг NO_WRAP! – Maks 2 April 2012 в 03:27
  • 4
    часов впустую: 2 :) – Ripityom 10 December 2012 в 12:03
  • 5
    Вышеприведенный код не работал для меня. Это сработало: String encoded = Base64.encodeToString((username + ":" + password).getBytes("UTF-8"), Base64.NO_WRAP); connection.setRequestProperty("Authorization", "Basic " + encoded); Обратите внимание, что у меня не было успеха только с Base64.encode (т. Е. Без «encodeToString»), поскольку он произвел некоторые странные байты результата, представление которых ASCII даже не напоминало Base64. – ComFreek 7 March 2015 в 23:20

Вы можете использовать java.net.Authenticator для настройки базового auth. глобально для каждого запроса, отправляемого вашим приложением, см .:

1
ответ дан avianey 18 August 2018 в 20:16
поделиться

Что касается проблемы кодирования Base64, я нашел эту библиотеку: http://sourceforge.net/projects/migbase64/

Я еще не полностью проверил ее, но я использую это для решения базовой проверки подлинности, показанного выше (а также для кодирования / декодирования изображения), и оно работает хорошо. Он предоставляет параметр для включения или отсутствия новой строки.

-2
ответ дан djilk 18 August 2018 в 20:16
поделиться

У меня тоже была эта проблема. И теперь я решил эту проблему. Мой код:

    URL url = new URL(stringUrl);

    String authStr = "MyAPIKey"+":"+"Password";
    System.out.println("Original String is " + authStr);

 // encode data on your side using BASE64
    byte[] bytesEncoded = Base64.encodeBase64(authStr .getBytes());
    String authEncoded = new String(bytesEncoded);

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestProperty("Authorization", "Basic "+authEncoded);

Это может помочь многим другим. Удачи.

0
ответ дан Khawaja M. Awais 18 August 2018 в 20:16
поделиться

Кстати, в случае, если кто-то другой сталкивается с этим, проблема с андроидом также присутствует, если вы используете org.apache.commons.codec.binary.Base64 и do Base64.encodeBase64String(). Вам нужно сделать Base64.encodeBase64() и получить байт [], затем построить строку.

Это полностью задело меня, что результаты будут разными для строки, заканчивающейся между этими двумя методами.

2
ответ дан Mickaël A. 18 August 2018 в 20:16
поделиться

вам нужно сделать это, просто скопируйте его, чтобы он был счастлив

    HttpURLConnection urlConnection;
    String url;
 //   String data = json;
    String result = null;
    try {
        String username ="danish.hussain@gmail.com";
        String password = "12345678";

        String auth =new String(username + ":" + password);
        byte[] data1 = auth.getBytes(UTF_8);
        String base64 = Base64.encodeToString(data1, Base64.NO_WRAP);
        //Connect
        urlConnection = (HttpURLConnection) ((new URL(urlBasePath).openConnection()));
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestProperty("Authorization", "Basic "+base64);
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestMethod("POST");
        urlConnection.setConnectTimeout(10000);
        urlConnection.connect();
        JSONObject obj = new JSONObject();

        obj.put("MobileNumber", "+97333746934");
        obj.put("EmailAddress", "danish.hussain@dhl.com");
        obj.put("FirstName", "Danish");
        obj.put("LastName", "Hussain");
        obj.put("Country", "BH");
        obj.put("Language", "EN");
        String data = obj.toString();
        //Write
        OutputStream outputStream = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(data);
        writer.close();
        outputStream.close();
        int responseCode=urlConnection.getResponseCode();
        if (responseCode == HttpsURLConnection.HTTP_OK) {
            //Read
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

        String line = null;
        StringBuilder sb = new StringBuilder();

        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }

        bufferedReader.close();
        result = sb.toString();

        }else {
        //    return new String("false : "+responseCode);
        new String("false : "+responseCode);
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
0
ответ дан Syed Danish Haider 18 August 2018 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: