![](/img/trans.png)
[英]How to get all unread emails in JAVA from lotus notes domino server
[英]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.