示例代码摘抄自 DELL ECS EMC aws-java-workshop
public static AmazonS3 getS3ClientWithV4Signatures() {
System.out.println("Running with V4 Signatures:\n");
return getBasicS3ClientBuilder().build();
}
public static AmazonS3 getS3ClientWithV2Signatures() {
AmazonS3ClientBuilder builder = getBasicS3ClientBuilder();
// switch to v2 auth
builder.setClientConfiguration(new ClientConfiguration().withSignerOverride("S3SignerType"));
System.out.println("Running with V2 Signatures:\n");
return builder.build();
}
文档上提到的已经被弃用的API,一定还有人在用
。
否则不会有人写文档让大家迁移到新接口。
故,一定要让调用API的应用可配置,兼容接口,以应对可能的变化。
绝不能认为“文档说旧接口废弃了,那我就只支持新接口”,这样遇到生产环境是旧接口,就要手忙脚乱,甚至重新发版了。
比如,业务方测试环境用了V41,但生产还是V22,理由是生产不好迁移。
其实对于 AWS S3 来讲,v4 签名是 v2签名的增强型扩展3,而非是 v2废弃后的替代。我一开始以为是后者,导致应用不兼容V2,其实是失误。