public StorageAccessTokenDo generateStorageAccessToken(String fileName, Integer userId,
Integer expireSeconds) {
if (null == expireSeconds || expireSeconds < 0) {
expireSeconds = 600;
}
TimeZone defaultTimeZone = TimeZone.getDefault();
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
TimeZone.setDefault(gmtTimeZone);
Calendar calendar = Calendar.getInstance(gmtTimeZone);
calendar.add(Calendar.SECOND, expireSeconds);
Date expire = calendar.getTime();
TimeZone.setDefault(defaultTimeZone);
String expiration = DateUtils.formatDateTime(DateUtils.nextSecond(expire),
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String policyOrigin = "{\"expiration\": \"" + expiration
+ "\", \"conditions\": [{\"bucket\": \"" + bucketName + "\"}]}";
String policy = base64Encode(policyOrigin.getBytes());
String signature = getSignature(policy.getBytes(), accessKeySecret.getBytes());
String key = DateUtils.formatDateDirectory(new Date()) + userId + "/" + fileName;
StorageAccessTokenDo sat = new StorageAccessTokenDo(accessKeyId, policy, signature, key);
return sat;
}
* base64加密
*
* @param origin
* @return
*/
@SuppressWarnings("restriction")
private static String base64Encode(byte[] origin) {
if (null == origin) {
return null;
}
return new sun.misc.BASE64Encoder().encode(origin).replace("\n", "").replace("\r", "");
}
* 使用HmacSHA1加密方式生成签名数据
*
* @param data
* @param key
* @return
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
*/
private static String getSignature(byte[] data, byte[] key) {
SecretKeySpec signingKey = new SecretKeySpec(key, HMAC_SHA1);
try {
Mac mac;
mac = Mac.getInstance(HMAC_SHA1);
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data);
return base64Encode(rawHmac);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}