spring-boot - 在 s3-outbound-gateway 中使用 object-acl-expression
问题描述
我想在 s3-outbound-gateway 中使用 object-acl-expression ,如下面的配置所述,但是由于 else 部分中的 null 值,它会抛出“非法状态异常”。我不想在 else 部分中设置任何其他访问控制。您能否就此提出一些解决方案?
<int-aws:s3-outbound-gateway
id="id" request-channel="requestChannelId"
reply-channel="replayChannelId"
transfer-manager="tm"
bucket-expression="bucketName"
object-acl-expression="headers.S3_FULL_ACCESS_OWNER_ENABLED == 'Y' ? T(com.amazonaws.services.s3.model.CannedAccessControlList).BucketOwnerFullControl : null
key-expression="headers.file_name"
command="UPLOAD">
</int-aws:s3-outbound-gateway>
预期:object-acl-expression 应该是存储桶中提供的默认值实际:抛出“非法状态异常”
解决方案
这在当前的实现中是不可能的object-acl-expression
。仅仅因为它不支持null
评估结果:
Object acl = this.objectAclExpression.getValue(this.evaluationContext, requestMessage);
Assert.state(acl instanceof AccessControlList || acl instanceof CannedAccessControlList,
"The 'objectAclExpression' ["
+ this.objectAclExpression.getExpressionString()
+ "] must evaluate to com.amazonaws.services.s3.model.AccessControlList " +
"or must evaluate to com.amazonaws.services.s3.model.CannedAccessControlList. " +
"Gotten: [" + acl + "]");
当然,我们可以解决这个问题,您可以随时就此事提出问题:https ://github.com/spring-projects/spring-integration-aws/issues
同时,作为一种解决方法,我看到了一个基于 的解决方案S3ProgressListener
,类似于我们内部所做的:
progressListener = new S3ProgressListener() {
@Override
public void onPersistableTransfer(PersistableTransfer persistableTransfer) {
}
@Override
public void progressChanged(ProgressEvent progressEvent) {
if (ProgressEventType.TRANSFER_COMPLETED_EVENT.equals(progressEvent.getEventType())) {
S3MessageHandler.this.transferManager.getAmazonS3Client().setObjectAcl(theAclRequest);
}
}
};
唯一的问题是您无法在该progressChanged
上下文中访问消息……我认为这也是我们必须解决的问题。
也许你现在可以用 theCannedAccessControlList.AuthenticatedRead
而不是null
?
推荐阅读
- c# - ASP.NET MVC - 在视图中自动重定向到外部站点
- c# - DataTable update() 插入重复的新行而不检查它是否存在
- python - 点积和对角线和多维矩阵
- asp.net-core - ASP.NET Core 控制器无法注册到授权包
- amazon-web-services - Terraform - 是否有管理启动配置中使用的 AMI 的最佳实践?
- javascript - 如何在 styled-components 中扩展组件样式
- enums - 如何在 OpenAPI 中定义枚举映射?
- python - 用分类列中的随机值填充缺失数据 - Python
- google-cloud-platform - 如何使用 Terraform 在云运行中添加 allUsers 成员
- python - 使用 Django 从 Flask 对用户进行身份验证