是否可以使用AWS SDK for Java 2创建一个预先签名的URL来访问阿里云/阿里云OSS bucket内容



我正在尝试使用AWS SDK for Java 2 API访问S3。除了预签名URL之外,我大部分时间都在工作。

根据https://www.alibabacloud.com/help/doc-detail/31952.htm看起来有一个不同的查询参数需要构建。看起来我必须使用他们的库,并有一个开关作为SignUtils的附加组件或重新实现部分。

显然,您可以使用AWS的库来实现这一点。您必须确保Presigner也具有endpointOverride配置集。这是我的代码,我已经注释了相关的地方

@Configuration
@Slf4j
public class S3ClientConfiguration {
// SPECIFY OVERRIDE
@Value("${aws.s3.portfolio.endpoint:#{null}}")
private URI endpointOverride;
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3AsyncClient amazonS3AsyncClient(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider,
final ClientOverrideConfiguration clientOverrideConfiguration) {
final S3AsyncClientBuilder builder = S3AsyncClient.builder()
.credentialsProvider(credentialsProvider)
.overrideConfiguration(clientOverrideConfiguration)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3Client amazonS3Client(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider,
final ClientOverrideConfiguration clientOverrideConfiguration) {
final S3ClientBuilder builder = S3Client.builder()
.credentialsProvider(credentialsProvider)
.overrideConfiguration(clientOverrideConfiguration)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
public ClientOverrideConfiguration clientOverrideConfiguration(final HttpTracing httpTracing) {
final var awsSdkTracing = AwsSdkTracing.create(httpTracing);
return ClientOverrideConfiguration.builder()
.addExecutionInterceptor(awsSdkTracing.executionInterceptor())
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public AwsCredentialsProvider credentialsProvider() {
return DefaultCredentialsProvider.create();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public S3Presigner presigner(
final AwsCredentialsProvider credentialsProvider,
final AwsRegionProvider regionProvider) {
final var builder = S3Presigner.builder()
.credentialsProvider(credentialsProvider)
.region(regionProvider.getRegion());
// SPECIFY OVERRIDE
if (endpointOverride != null) {
builder.endpointOverride(endpointOverride);
}
return builder
.build();
}
@Bean
@ConditionalOnProperty(prefix = "aws.s3", name = "enabled", matchIfMissing = true)
public AwsRegionProvider regionProvider() {
return DefaultAwsRegionProviderChain.builder().build();
}
}

最新更新