Загрузка учетных данных AWS из сервлета Java на сервере Lotus Domino в Linux

1

У меня есть такой сценарий: я создал сервлет Java, который будет выполняться на сервере Lotus Domino (на всякий случай сервлет является OUTSIDE из любой базы данных, он находится в папке <domino data>/domino/servlet/my_servlet.class). Сервлет получает доступ к серверу S3, используя файл учетных данных.

Когда я разработал сервлет, я выполнил свои тесты на сервере Windows, и все работало как шарм. Но, когда я делал те же тесты на сервере Linux, используя те же учетные данные и тот же сервлет, это не сработало.

Исключение произошло здесь:

    AWSCredentials credentials = null;
    try {
        credentials = new ProfileCredentialsProvider().getCredentials();
    } catch (Exception e) {
        throw new AmazonClientException(
                "Cannot load the credentials from the credential profiles file. " +
                "Please make sure that your credentials file is at the correct " +
                "location (~/.aws/credentials), and is in valid format.",
                e);
    }

Учитывая, что сервер domino выполняется с notes пользователя, я notes/.aws/credentials данные в notes/.aws/credentials. Ничего. Я положил его в ec2-user/.aws/credentials (это сервер EC2). Больше ничего. Такое же исключение.

О сервере Domino он выполняется с использованием пользовательских notes. Папка .aws и владелец файла credentials - это notes. Разрешения в файле credentials - 600. Владелец сервлета также notes.

У вас есть представление о том, как я могу это решить?

ТИА,

EDIT: Я добавил эти строки в сервлет:

res.setContentType("text/html");        
PrintWriter toBrowser = res.getWriter();        
//etc.
toBrowser.println("HOME: " + System.getProperty("user.home")); 

Я получил это:

HOME: /home/notes 

Я снова проверил эту папку, и учетные данные все еще там.

[root@ip-xxx-xxx-xxx-xxx notes]# ls -l /home/notes/.aws
total 4
-rw------- 1 notes notes 117 Nov 28 03:50 credentials
[root@ip-xxx-xxx-xxx-xxx notes]#

EDIT 2: Я добавил эти строки тоже:

File f = new File(System.getProperty("user.home") + "/.aws/credentials");

if(f.exists()){
    toBrowser.println("Credentials exists" + "<BR/>"); 
}else{
    toBrowser.println("Credentials DOES NOT exist" + "<BR/>"); 
}

И я получил это:

Credentials exists

Таким образом, сервлет имеет правильные разрешения для поиска файла credentials.

Я застрял в этом...

  • 1
    Где вы поместили файл на сервер Windows при тестировании? И просто чтобы уточнить, был ли тест на самом деле с использованием сервлета на сервере Domino в Windows? Или вы тестировали как отдельную программу на Java.
  • 0
    @RichardSchwartz На сервере Windows файл находился в каталоге c: \ Users \ MyUser \ .aws \ credentials. И да, я использовал ту же среду в Windows: автономный сервлет Java на сервере Lotus Domino ... Даже, я использую тот же сервлет и тот же файл учетных данных (я дважды проверил это)
Показать ещё 3 комментария
Теги:
servlets
amazon-s3
lotus-domino

2 ответа

1
Лучший ответ

Проблема в том, что сервлет не имел доступа к переменным среды

Изображение 174551

Это связано с ошибкой на сервере Lotus Domino с версии 8.5. Решение изменило файл java.policy в $ JAVA_HOME/lib/security, добавив эту строку:

grant {
    [...]
    permission java.security.AllPermission;
    [...]
}

Все работает снова.

0

На самом деле, если вы разместите свои учетные данные в ~/.aws/credentials, как вы это сделали, вы можете позвонить своему конструктору клиента Amazon AWS SDK без каких-либо параметров. Например:

AmazonSNSAsyncClient snsClient = new AmazonSNSAsyncClient();

Но если сервлет не имеет доступа к переменным окружения, то AWS SDK, вероятно, тоже не имеет доступа. Однако код загрузки файла не требуется.

Дополнительную информацию см. В http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню