Объект запроса Restlet не содержит аутентификационные данные - PullRequest
0 голосов
/ 08 ноября 2018

База кода, с которой я работаю, имеет две версии: первая (более старая) версия использует v1.0.0 платформы Restlet, а последняя (более новая) версия использует v2.2.2.

Когда пользователь запрашивает обе версии моей службы с помощью cURL и предоставляет свое имя пользователя и пароль в виде String в кодировке base64, это работает. Аналогично, обе версии принимают кодированный String в заголовке Authorization: Basic ....

Когда они отличаются, я пытаюсь позвонить в службу, используя HttpURLConnection. Первый работает, второй нет.

Это общее представление о том, как работает инструмент, который вызывает мой сервис:

final String xx_userid = userid; // userid set above
final String xx_pwd = pwd;       // pwd set above
Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(
                xx_userid, xx_pwd.toCharArray());
    }
});

// ... some more code ...

URL url = new URL(url_string); // url_string is the endpoint of my service
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Accept", "text/xml");

Приведенный выше код работает для более старой кодовой базы (то есть я получаю обратно 200 OK, а также ожидаемый XML-ответ). Однако для новой кодовой базы я получаю 403 Unauthorized назад.

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

@Override
protected boolean authenticate (Request request, Response response) {

    String user = null;
    String pass = null;

    user = request.getChallengeResponse().getIdentifier();
    pass = new String(request.getChallengeResponse().getSecret());

    // ... some more code ...

}

И user, и pass остаются null, потому что метод getChallengeResponse() возвращает ноль.

Кто-нибудь знает, почему этот код работает для v1.0.0 платформы Restlet, но не для v2.2.2? Или мне чего-то не хватает?

Некоторая другая (вероятно, не относящаяся к делу) информация:

  • Старая кодовая база:
    • Работает в Tomcat v7.0.55
    • Размещается на машине RHEL7
    • Нет балансировщика нагрузки
  • Новая кодовая база:
    • Работает в Tomcat v7.0.55
    • Размещается на экземпляре EC2 (Amazon Linux AMI)
    • Использует балансировщик нагрузки приложений (ALB) Amazon для указания на разные экземпляры EC2
    • Балансировщик нагрузки имеет другое доменное имя, чем экземпляры службы

Спасибо заранее. Пожалуйста, дайте мне знать, если есть какая-то дополнительная информация, которую я мог бы предоставить, чтобы упростить отладку.

...