java url 验证失败_通过java访问Sas url时出错,服务器无法验证请求

请参考以下代码:

package blob;

import com.microsoft.azure.storage.CloudStorageAccount;

import com.microsoft.azure.storage.blob.*;

import java.net.URI;

import java.util.*;

public class ListBlobBySasToken {

public static void main(String[] args) throws Exception {

String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***;EndpointSuffix=core.windows.net";

CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);

CloudBlobClient blobClient = storageAccount.createCloudBlobClient();

CloudBlobContainer container = blobClient.getContainerReference("jay");

String sasToken = generateSAS(container,true);

System.out.println(sasToken);

String sasUrl = container.getUri()+ sasToken;

//Then use sasUrl to init container1

CloudBlobContainer container1 = new CloudBlobContainer(new URI(sasUrl));

CloudBlob blob = container1.getBlockBlobReference("test.json");

System.out.println(blob.getStorageUri());

}

private static String generateSAS(CloudBlobContainer container, boolean readonly) throws Exception {

// Create a container if it does not exist.

container.createIfNotExists();

// Create a new shared access policy.

SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy();

// Create a UTC Gregorian calendar value.

GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));

// Specify the current time as the start time for the shared access

// signature.

//

calendar.setTime(new Date());

sasPolicy.setSharedAccessStartTime(calendar.getTime());

// Use the start time delta one hour as the end time for the shared

// access signature.

calendar.add(Calendar.HOUR, 10);

sasPolicy.setSharedAccessExpiryTime(calendar.getTime());

if (readonly) {

// Set READ permissions

sasPolicy.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.LIST));

} else {

// Set READ and WRITE permissions.

//

sasPolicy.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.WRITE, SharedAccessBlobPermissions.LIST));

}

// Create the container permissions.

BlobContainerPermissions containerPermissions = new BlobContainerPermissions();

// Turn public access to the container off.

containerPermissions.setPublicAccess(BlobContainerPublicAccessType.OFF);

container.uploadPermissions(containerPermissions);

// Create a shared access signature for the container.

String sas = container.generateSharedAccessSignature(sasPolicy, null);

// HACK: when the just generated SAS is used straight away, we get an

// authorization error intermittently. Sleeping for 1.5 seconds fixes that

// on my box.

// Thread.sleep(1500);

// Return to caller with the shared access signature.

return sas;

}

}

更多细节,请参考这个

article

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值