Как подписать запрос REST для Amazon API с помощью Java и Eclipse?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как подписать запрос REST для Amazon API с помощью Java и Eclipse?

Сообщение Anonymous »

Вот моя дилемма. Я умею читать код Java, но не умею его писать. У меня есть несколько примеров из документации Amazon, но я делаю что-то не так. Я использую Эклипс. У меня есть AWS Java SDK, кодек и журналирование Apache Commons и Base64. У меня есть весь код в соответствующих путях классов внутри моего проекта.

Я понимаю, как сформировать запрос (порядок элементов, временная метка и т. д.), но не знаю. не знаю, как отправить эту информацию в код Java для создания подписанного запроса. Итак, я начну с кода, который использую из документации.

Код для подписи:

Код: Выделить всё

import java.security.SignatureException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

/**
* This class defines common routines for generating
* authentication signatures for AWS requests.
*/
public class Signature {
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
/**
* Computes RFC 2104-compliant HMAC signature.
* * @param data
* The data to be signed.
* @param key
* The signing key.
* @return
* The Base64-encoded RFC 2104-compliant HMAC signature.
* @throws
* java.security.SignatureException when signature generation fails
*/
public static String calculateRFC2104HMAC(String data, String key)
throws java.security.SignatureException
{
String result;
try {

// get an hmac_sha1 key from the raw key bytes
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);

// get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);

// compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(data.getBytes());

// base64-encode the hmac
result = Encoding.EncodeBase64(rawHmac);

} catch (Exception e) {
throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
}
return result;
}
}
Код для кодирования:

Код: Выделить всё

/**
* This class defines common routines for encoding * data in AWS requests.
*/
public class Encoding {
/**
* Performs base64-encoding of input bytes.
*
* @param rawData * Array of bytes to be encoded.
* @return * The base64 encoded string representation of rawData.
*/
public static String EncodeBase64(byte[] rawData) {
return Base64.encodeBytes(rawData);
}
}
Код, который я придумал для подписи запроса:

Код: Выделить всё

import java.security.SignatureException;

public class SignatureTest {
/**
* @param args
* @throws SignatureException
*/
public static void main( String[] args ) throws SignatureException {
// data is the URL parameters and time stamp to be encoded
String data = "";
// key is the secret key
String key = "";
Signature.calculateRFC2104HMAC(data, key);
}
}
Сначала я получал ошибки, связанные с путем к классам, поэтому добавил их в свой проект. Теперь, когда я запускаю код, я не получаю ни ошибок, ни ответа, я просто возвращаюсь в командную строку. Я знаю, что это, вероятно, простое решение. Я потратил неделю, пытаясь понять это, но не смог найти ответов. Может ли кто-нибудь указать мне правильное направление?

Примечание. Я не включил сюда код Base64 из-за его размера, но он есть в моем проекте.< /п>

Подробнее здесь: https://stackoverflow.com/questions/157 ... nd-eclipse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»