繁体   English   中英

在Linux上的Lotus Domino服务器上从Java servlet加载AWS凭证

[英]Loading AWS credentials from a Java servlet on a Lotus Domino server on Linux

我有这种情况:我创建了一个Java servlet,该Java servlet将在Lotus Domino服务器中执行(以防万一该servlet在任何数据库中<domino data>/domino/servlet/my_servlet.class 。它在<domino data>/domino/servlet/my_servlet.class文件夹中)。 Servlet使用凭据文件访问S3服务器。

当我开发servlet时,我在Windows服务器上进行了测试,所有工作都像一个魅力。 但是,当我使用相同的凭据和相同的servlet在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 没有。 我将其放在ec2-user/.aws/credentials (这是一个EC2服务器)中。 没事了 同样的例外。

关于Domino服务器,它是使用用户notes执行的。 .aws文件夹和credentials文件的所有者为notes credentials文件中的权限为600。Servlet所有者也为notes

您对我该如何解决有任何想法?

TIA,

编辑:我在servlet中添加了以下行:

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]#

编辑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

因此,该servlet具有查找credentials文件的正确权限。

我被困在这...

好吧,问题在于Servlet无法访问环境变量

在此处输入图片说明

这是因为自8.5版以来,Lotus Domino服务器中存在一个错误 解决方案是修改$ JAVA_HOME / lib / security中的java.policy文件,并添加以下行:

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

一切再次正常。

实际上,如果您像完成操作一样将凭证放置在〜/ .aws / credentials中,则可以不带任何参数地调用Amazon AWS开发工具包客户端构造函数。 例如:

AmazonSNSAsyncClient snsClient = new AmazonSNSAsyncClient();

但是,如果Servlet无法访问环境变量,则AWS SDK可能也无法访问。 但是,不需要文件加载代码。

有关更多信息,请参见http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM