From e5f0f28bf3666b9c28d1fe586b74b89b86a4f60b Mon Sep 17 00:00:00 2001 From: mContext Date: Tue, 16 Jun 2020 02:19:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=8A=A5=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/bean/AuthPrivateUrlRequest.java | 9 +- .../yuxihan/ucloud/auth/bean/AuthRequest.java | 8 +- .../auth/controller/AuthController.java | 14 +-- .../ucloud/auth/service/UFileAuthService.java | 76 +++++++++++++++ .../ucloud/auth/service/UfileAuthService.java | 92 ------------------- .../util/{Encryptor.java => Encryptors.java} | 35 +++---- .../ucloud/auth/util/ParameterValidator.java | 14 +-- 7 files changed, 102 insertions(+), 146 deletions(-) create mode 100644 src/main/java/com/yuxihan/ucloud/auth/service/UFileAuthService.java delete mode 100644 src/main/java/com/yuxihan/ucloud/auth/service/UfileAuthService.java rename src/main/java/com/yuxihan/ucloud/auth/util/{Encryptor.java => Encryptors.java} (76%) diff --git a/src/main/java/com/yuxihan/ucloud/auth/bean/AuthPrivateUrlRequest.java b/src/main/java/com/yuxihan/ucloud/auth/bean/AuthPrivateUrlRequest.java index 1515c09..a0e75e6 100644 --- a/src/main/java/com/yuxihan/ucloud/auth/bean/AuthPrivateUrlRequest.java +++ b/src/main/java/com/yuxihan/ucloud/auth/bean/AuthPrivateUrlRequest.java @@ -6,12 +6,7 @@ import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.NotNull; -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018-11-29 15:15 - */ +@SuppressWarnings("unused") public class AuthPrivateUrlRequest { @NotEmpty(message = "method is required!") private String method; @@ -36,7 +31,7 @@ public class AuthPrivateUrlRequest { } public long getExpires() { - return expires.longValue(); + return expires; } public String getOptional() { diff --git a/src/main/java/com/yuxihan/ucloud/auth/bean/AuthRequest.java b/src/main/java/com/yuxihan/ucloud/auth/bean/AuthRequest.java index 86343cf..ae12df9 100644 --- a/src/main/java/com/yuxihan/ucloud/auth/bean/AuthRequest.java +++ b/src/main/java/com/yuxihan/ucloud/auth/bean/AuthRequest.java @@ -3,13 +3,7 @@ package com.yuxihan.ucloud.auth.bean; import com.google.gson.Gson; import org.hibernate.validator.constraints.NotEmpty; - -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018-11-29 15:15 - */ +@SuppressWarnings("unused") public class AuthRequest { @NotEmpty(message = "method is required!") private String method; diff --git a/src/main/java/com/yuxihan/ucloud/auth/controller/AuthController.java b/src/main/java/com/yuxihan/ucloud/auth/controller/AuthController.java index 1f89b2e..6c90701 100644 --- a/src/main/java/com/yuxihan/ucloud/auth/controller/AuthController.java +++ b/src/main/java/com/yuxihan/ucloud/auth/controller/AuthController.java @@ -5,7 +5,7 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.yuxihan.ucloud.auth.bean.AuthPrivateUrlRequest; import com.yuxihan.ucloud.auth.bean.AuthRequest; -import com.yuxihan.ucloud.auth.service.UfileAuthService; +import com.yuxihan.ucloud.auth.service.UFileAuthService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; @@ -13,17 +13,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018-11-29 10:37 - */ @Controller("authController") public class AuthController { @Autowired - private UfileAuthService ufileAuthService; + private UFileAuthService ufileAuthService; @RequestMapping(value = "/applyAuth", method = RequestMethod.POST) @ResponseBody @@ -33,7 +27,7 @@ public class AuthController { // 您可以根据您的项目需求,处理端传来的Optional参数集合 if (jsonElement != null) System.out.println(jsonElement.toString()); - return ufileAuthService.calculateAuthroization(requestBean); + return ufileAuthService.calculateAuthorization(requestBean); } @RequestMapping(value = "/applyPrivateUrlAuth", method = RequestMethod.POST) @@ -44,6 +38,6 @@ public class AuthController { // 您可以根据您的项目需求,处理端传来的Optional参数集合 if (jsonElement != null) System.out.println(jsonElement.toString()); - return ufileAuthService.calculatePrivateUrlAuthroization(requestBean); + return ufileAuthService.calculatePrivateUrlAuthorization(requestBean); } } diff --git a/src/main/java/com/yuxihan/ucloud/auth/service/UFileAuthService.java b/src/main/java/com/yuxihan/ucloud/auth/service/UFileAuthService.java new file mode 100644 index 0000000..da1066b --- /dev/null +++ b/src/main/java/com/yuxihan/ucloud/auth/service/UFileAuthService.java @@ -0,0 +1,76 @@ +package com.yuxihan.ucloud.auth.service; + + +import com.yuxihan.ucloud.auth.bean.AuthPrivateUrlRequest; +import com.yuxihan.ucloud.auth.bean.AuthRequest; +import com.yuxihan.ucloud.auth.util.Encryptors; +import com.yuxihan.ucloud.auth.util.ParameterValidator; +import org.springframework.stereotype.Service; + +import java.util.Base64; + + +@Service +public class UFileAuthService { + private static final String publicKey = "TOKEN_fba51889-6f2f-40d4-80dc-59a43a2e3b1c"; + private static final String privateKey = "5cc9c018-41ef-4d34-9707-b8009ba7f837"; + + public String calculateAuthorization(AuthRequest request) { + try { + ParameterValidator.validator(request); + + StringBuilder signData = new StringBuilder(); + signData.append(request.getMethod()).append("\n"); + signData.append(request.getContent_md5()).append("\n"); + signData.append(request.getContent_type()).append("\n"); + signData.append(request.getDate()).append("\n"); + signData.append("/").append(request.getBucket()); + signData.append("/").append(request.getKey()); + if (request.getPut_policy() != null && !request.getPut_policy().isEmpty()) { + signData.append(request.getPut_policy()); + } + + String signature = signature(signData.toString()); + + StringBuilder res = new StringBuilder("UCloud ") + .append(publicKey) + .append(":") + .append(signature); + + if (request.getPut_policy() != null && !request.getPut_policy().isEmpty()) { + res.append(":").append(request.getPut_policy()); + } + + return res.toString(); + } catch (Exception e) { + return e.getMessage(); + } + + } + + public String calculatePrivateUrlAuthorization(AuthPrivateUrlRequest request) { + try { + ParameterValidator.validator(request); + + String signData = request.getMethod() + "\n" + + "\n" + + "\n" + + request.getExpires() + "\n" + + "/" + request.getBucket() + + "/" + request.getKey(); + return signature(signData); + } catch (Exception e) { + return e.getMessage(); + } + } + + private String signature(String data) throws Exception { + byte[] hmacSha1; + hmacSha1 = Encryptors.Hmac_SHA1(UFileAuthService.privateKey, data); + + if (hmacSha1 == null || hmacSha1.length == 0) + throw new Exception("Encrypt Hmac-SHA1 failed!"); + + return Base64.getEncoder().encodeToString(hmacSha1); + } +} diff --git a/src/main/java/com/yuxihan/ucloud/auth/service/UfileAuthService.java b/src/main/java/com/yuxihan/ucloud/auth/service/UfileAuthService.java deleted file mode 100644 index 22b6014..0000000 --- a/src/main/java/com/yuxihan/ucloud/auth/service/UfileAuthService.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.yuxihan.ucloud.auth.service; - - -import com.yuxihan.ucloud.auth.bean.AuthPrivateUrlRequest; -import com.yuxihan.ucloud.auth.bean.AuthRequest; -import com.yuxihan.ucloud.auth.util.Encryptor; -import com.yuxihan.ucloud.auth.util.ParameterValidator; -import org.springframework.stereotype.Service; -import sun.security.validator.ValidatorException; - -import java.util.Base64; - - -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018-11-29 14:20 - */ - -@Service -public class UfileAuthService { - private static final String publicKey = "TOKEN_fba51889-6f2f-40d4-80dc-59a43a2e3b1c"; - private static final String privateKey = "5cc9c018-41ef-4d34-9707-b8009ba7f837"; - - public String calculateAuthroization(AuthRequest request) { - try { - ParameterValidator.validator(request); - - StringBuffer signData = new StringBuffer(); - signData.append(request.getMethod() + "\n"); - signData.append(request.getContent_md5() + "\n"); - signData.append(request.getContent_type() + "\n"); - signData.append(request.getDate() + "\n"); - signData.append("/" + request.getBucket()); - signData.append("/" + request.getKey()); - if (request.getPut_policy() != null && !request.getPut_policy().isEmpty()) { - signData.append(request.getPut_policy()); - } - - String signature = signature(privateKey, signData.toString()); - - StringBuilder res = new StringBuilder("UCloud ") - .append(publicKey) - .append(":") - .append(signature); - - if (request.getPut_policy() != null && !request.getPut_policy().isEmpty()) { - res.append(":").append(request.getPut_policy()); - } - - return res.toString(); - } catch ( - ValidatorException e) { - return e.getMessage(); - } catch ( - Exception e) { - return e.getMessage(); - } - - } - - public String calculatePrivateUrlAuthroization(AuthPrivateUrlRequest request) { - try { - ParameterValidator.validator(request); - - StringBuffer signData = new StringBuffer(); - signData.append(request.getMethod() + "\n"); - signData.append("\n"); - signData.append("\n"); - signData.append(request.getExpires() + "\n"); - signData.append("/" + request.getBucket()); - signData.append("/" + request.getKey()); - - return signature(privateKey, signData.toString()); - } catch (ValidatorException e) { - return e.getMessage(); - } catch (Exception e) { - return e.getMessage(); - } - } - - private String signature(String key, String data) throws Exception { - byte[] hmacSha1 = null; - hmacSha1 = Encryptor.Hmac_SHA1(key, data); - - if (hmacSha1 == null || hmacSha1.length == 0) - throw new Exception("Encrypt Hmac-SHA1 failed!"); - - return Base64.getEncoder().encodeToString(hmacSha1); - } -} diff --git a/src/main/java/com/yuxihan/ucloud/auth/util/Encryptor.java b/src/main/java/com/yuxihan/ucloud/auth/util/Encryptors.java similarity index 76% rename from src/main/java/com/yuxihan/ucloud/auth/util/Encryptor.java rename to src/main/java/com/yuxihan/ucloud/auth/util/Encryptors.java index 85a6251..e648ac0 100644 --- a/src/main/java/com/yuxihan/ucloud/auth/util/Encryptor.java +++ b/src/main/java/com/yuxihan/ucloud/auth/util/Encryptors.java @@ -4,17 +4,13 @@ import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.io.*; +import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018/11/8 10:57 - */ -public class Encryptor { +@SuppressWarnings("unused") +public class Encryptors { public final static String TYPE_HMAC_SHA1 = "HmacSHA1"; public final static String TYPE_SHA1 = "SHA1"; @@ -24,9 +20,9 @@ public class Encryptor { * @param key 加密秘钥 * @param data 加密内容 * @return 加密结果 - * @throws InvalidKeyException - * @throws NoSuchAlgorithmException - * @throws IllegalStateException + * @throws InvalidKeyException InvalidKeyException + * @throws NoSuchAlgorithmException NoSuchAlgorithmException + * @throws IllegalStateException IllegalStateException */ public static byte[] Hmac_SHA1(byte[] key, byte[] data) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException { if (key == null || key.length == 0) @@ -35,7 +31,7 @@ public class Encryptor { if (data == null || data.length == 0) return null; - byte[] result = null; + byte[] result; SecretKey secret = new SecretKeySpec(key, TYPE_HMAC_SHA1); Mac mac = Mac.getInstance(TYPE_HMAC_SHA1); mac.init(secret); @@ -50,10 +46,10 @@ public class Encryptor { * @param key 加密秘钥 * @param data 加密内容 * @return 加密结果 - * @throws UnsupportedEncodingException - * @throws InvalidKeyException - * @throws NoSuchAlgorithmException - * @throws IllegalStateException + * @throws UnsupportedEncodingException UnsupportedEncodingException + * @throws InvalidKeyException InvalidKeyException + * @throws NoSuchAlgorithmException NoSuchAlgorithmException + * @throws IllegalStateException IllegalStateException */ public static byte[] Hmac_SHA1(String key, String data) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException { if (key == null || key.length() == 0) @@ -62,7 +58,7 @@ public class Encryptor { if (data == null || data.length() == 0) return null; - return Hmac_SHA1(key.getBytes("UTF-8"), data.getBytes("UTF-8")); + return Hmac_SHA1(key.getBytes(StandardCharsets.UTF_8), data.getBytes(StandardCharsets.UTF_8)); } /** @@ -70,7 +66,7 @@ public class Encryptor { * * @param data 加密内容 * @return 加密结果 - * @throws NoSuchAlgorithmException + * @throws NoSuchAlgorithmException NoSuchAlgorithmException */ public static byte[] SHA1(byte[] data) throws NoSuchAlgorithmException { if (data == null || data.length == 0) @@ -95,12 +91,11 @@ public class Encryptor { MessageDigest sha1 = MessageDigest.getInstance(TYPE_SHA1); try { byte[] buff = new byte[64 * 1024]; - int len = 0; + int len; while ((len = inputStream.read(buff)) > 0) sha1.update(buff, 0, len); } finally { - if (inputStream != null) - inputStream.close(); + inputStream.close(); } return sha1.digest(); diff --git a/src/main/java/com/yuxihan/ucloud/auth/util/ParameterValidator.java b/src/main/java/com/yuxihan/ucloud/auth/util/ParameterValidator.java index 93d0afe..4c8e09d 100644 --- a/src/main/java/com/yuxihan/ucloud/auth/util/ParameterValidator.java +++ b/src/main/java/com/yuxihan/ucloud/auth/util/ParameterValidator.java @@ -9,23 +9,17 @@ import javax.validation.ValidatorFactory; import java.util.Iterator; import java.util.Set; -/** - * @description: - * @author: joshua - * @E-mail: joshua.yin@ucloud.cn - * @date: 2018-11-29 15:07 - */ public class ParameterValidator { /** * 校验器工厂 */ - private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); public static void validator(T obj) throws ValidatorException { Validator validator = factory.getValidator(); Set> constraintViolations = validator.validate(obj); - Iterator> it = constraintViolations.iterator(); - while (it.hasNext()) - throw new ValidatorException(it.next().getMessage()); + for (ConstraintViolation constraintViolation : constraintViolations) { + throw new ValidatorException(constraintViolation.getMessage()); + } } }