mirror of
https://e.coding.net/mcontext/mContext/sdu_server.git
synced 2024-09-18 02:24:54 +08:00
解决报警告
This commit is contained in:
parent
0dde7ca167
commit
e5f0f28bf3
@ -6,12 +6,7 @@ import org.hibernate.validator.constraints.NotEmpty;
|
|||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
@SuppressWarnings("unused")
|
||||||
* @description:
|
|
||||||
* @author: joshua
|
|
||||||
* @E-mail: joshua.yin@ucloud.cn
|
|
||||||
* @date: 2018-11-29 15:15
|
|
||||||
*/
|
|
||||||
public class AuthPrivateUrlRequest {
|
public class AuthPrivateUrlRequest {
|
||||||
@NotEmpty(message = "method is required!")
|
@NotEmpty(message = "method is required!")
|
||||||
private String method;
|
private String method;
|
||||||
@ -36,7 +31,7 @@ public class AuthPrivateUrlRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public long getExpires() {
|
public long getExpires() {
|
||||||
return expires.longValue();
|
return expires;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOptional() {
|
public String getOptional() {
|
||||||
|
@ -3,13 +3,7 @@ package com.yuxihan.ucloud.auth.bean;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
import org.hibernate.validator.constraints.NotEmpty;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
/**
|
|
||||||
* @description:
|
|
||||||
* @author: joshua
|
|
||||||
* @E-mail: joshua.yin@ucloud.cn
|
|
||||||
* @date: 2018-11-29 15:15
|
|
||||||
*/
|
|
||||||
public class AuthRequest {
|
public class AuthRequest {
|
||||||
@NotEmpty(message = "method is required!")
|
@NotEmpty(message = "method is required!")
|
||||||
private String method;
|
private String method;
|
||||||
|
@ -5,7 +5,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.yuxihan.ucloud.auth.bean.AuthPrivateUrlRequest;
|
import com.yuxihan.ucloud.auth.bean.AuthPrivateUrlRequest;
|
||||||
import com.yuxihan.ucloud.auth.bean.AuthRequest;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
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.RequestMethod;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
/**
|
|
||||||
* @description:
|
|
||||||
* @author: joshua
|
|
||||||
* @E-mail: joshua.yin@ucloud.cn
|
|
||||||
* @date: 2018-11-29 10:37
|
|
||||||
*/
|
|
||||||
@Controller("authController")
|
@Controller("authController")
|
||||||
public class AuthController {
|
public class AuthController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UfileAuthService ufileAuthService;
|
private UFileAuthService ufileAuthService;
|
||||||
|
|
||||||
@RequestMapping(value = "/applyAuth", method = RequestMethod.POST)
|
@RequestMapping(value = "/applyAuth", method = RequestMethod.POST)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@ -33,7 +27,7 @@ public class AuthController {
|
|||||||
// 您可以根据您的项目需求,处理端传来的Optional参数集合
|
// 您可以根据您的项目需求,处理端传来的Optional参数集合
|
||||||
if (jsonElement != null)
|
if (jsonElement != null)
|
||||||
System.out.println(jsonElement.toString());
|
System.out.println(jsonElement.toString());
|
||||||
return ufileAuthService.calculateAuthroization(requestBean);
|
return ufileAuthService.calculateAuthorization(requestBean);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/applyPrivateUrlAuth", method = RequestMethod.POST)
|
@RequestMapping(value = "/applyPrivateUrlAuth", method = RequestMethod.POST)
|
||||||
@ -44,6 +38,6 @@ public class AuthController {
|
|||||||
// 您可以根据您的项目需求,处理端传来的Optional参数集合
|
// 您可以根据您的项目需求,处理端传来的Optional参数集合
|
||||||
if (jsonElement != null)
|
if (jsonElement != null)
|
||||||
System.out.println(jsonElement.toString());
|
System.out.println(jsonElement.toString());
|
||||||
return ufileAuthService.calculatePrivateUrlAuthroization(requestBean);
|
return ufileAuthService.calculatePrivateUrlAuthorization(requestBean);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,17 +4,13 @@ import javax.crypto.Mac;
|
|||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
/**
|
@SuppressWarnings("unused")
|
||||||
* @description:
|
public class Encryptors {
|
||||||
* @author: joshua
|
|
||||||
* @E-mail: joshua.yin@ucloud.cn
|
|
||||||
* @date: 2018/11/8 10:57
|
|
||||||
*/
|
|
||||||
public class Encryptor {
|
|
||||||
public final static String TYPE_HMAC_SHA1 = "HmacSHA1";
|
public final static String TYPE_HMAC_SHA1 = "HmacSHA1";
|
||||||
public final static String TYPE_SHA1 = "SHA1";
|
public final static String TYPE_SHA1 = "SHA1";
|
||||||
|
|
||||||
@ -24,9 +20,9 @@ public class Encryptor {
|
|||||||
* @param key 加密秘钥
|
* @param key 加密秘钥
|
||||||
* @param data 加密内容
|
* @param data 加密内容
|
||||||
* @return 加密结果
|
* @return 加密结果
|
||||||
* @throws InvalidKeyException
|
* @throws InvalidKeyException InvalidKeyException
|
||||||
* @throws NoSuchAlgorithmException
|
* @throws NoSuchAlgorithmException NoSuchAlgorithmException
|
||||||
* @throws IllegalStateException
|
* @throws IllegalStateException IllegalStateException
|
||||||
*/
|
*/
|
||||||
public static byte[] Hmac_SHA1(byte[] key, byte[] data) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException {
|
public static byte[] Hmac_SHA1(byte[] key, byte[] data) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException {
|
||||||
if (key == null || key.length == 0)
|
if (key == null || key.length == 0)
|
||||||
@ -35,7 +31,7 @@ public class Encryptor {
|
|||||||
if (data == null || data.length == 0)
|
if (data == null || data.length == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
byte[] result = null;
|
byte[] result;
|
||||||
SecretKey secret = new SecretKeySpec(key, TYPE_HMAC_SHA1);
|
SecretKey secret = new SecretKeySpec(key, TYPE_HMAC_SHA1);
|
||||||
Mac mac = Mac.getInstance(TYPE_HMAC_SHA1);
|
Mac mac = Mac.getInstance(TYPE_HMAC_SHA1);
|
||||||
mac.init(secret);
|
mac.init(secret);
|
||||||
@ -50,10 +46,10 @@ public class Encryptor {
|
|||||||
* @param key 加密秘钥
|
* @param key 加密秘钥
|
||||||
* @param data 加密内容
|
* @param data 加密内容
|
||||||
* @return 加密结果
|
* @return 加密结果
|
||||||
* @throws UnsupportedEncodingException
|
* @throws UnsupportedEncodingException UnsupportedEncodingException
|
||||||
* @throws InvalidKeyException
|
* @throws InvalidKeyException InvalidKeyException
|
||||||
* @throws NoSuchAlgorithmException
|
* @throws NoSuchAlgorithmException NoSuchAlgorithmException
|
||||||
* @throws IllegalStateException
|
* @throws IllegalStateException IllegalStateException
|
||||||
*/
|
*/
|
||||||
public static byte[] Hmac_SHA1(String key, String data) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException {
|
public static byte[] Hmac_SHA1(String key, String data) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException {
|
||||||
if (key == null || key.length() == 0)
|
if (key == null || key.length() == 0)
|
||||||
@ -62,7 +58,7 @@ public class Encryptor {
|
|||||||
if (data == null || data.length() == 0)
|
if (data == null || data.length() == 0)
|
||||||
return null;
|
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 加密内容
|
* @param data 加密内容
|
||||||
* @return 加密结果
|
* @return 加密结果
|
||||||
* @throws NoSuchAlgorithmException
|
* @throws NoSuchAlgorithmException NoSuchAlgorithmException
|
||||||
*/
|
*/
|
||||||
public static byte[] SHA1(byte[] data) throws NoSuchAlgorithmException {
|
public static byte[] SHA1(byte[] data) throws NoSuchAlgorithmException {
|
||||||
if (data == null || data.length == 0)
|
if (data == null || data.length == 0)
|
||||||
@ -95,12 +91,11 @@ public class Encryptor {
|
|||||||
MessageDigest sha1 = MessageDigest.getInstance(TYPE_SHA1);
|
MessageDigest sha1 = MessageDigest.getInstance(TYPE_SHA1);
|
||||||
try {
|
try {
|
||||||
byte[] buff = new byte[64 * 1024];
|
byte[] buff = new byte[64 * 1024];
|
||||||
int len = 0;
|
int len;
|
||||||
while ((len = inputStream.read(buff)) > 0)
|
while ((len = inputStream.read(buff)) > 0)
|
||||||
sha1.update(buff, 0, len);
|
sha1.update(buff, 0, len);
|
||||||
} finally {
|
} finally {
|
||||||
if (inputStream != null)
|
inputStream.close();
|
||||||
inputStream.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sha1.digest();
|
return sha1.digest();
|
@ -9,23 +9,17 @@ import javax.validation.ValidatorFactory;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
|
||||||
* @description:
|
|
||||||
* @author: joshua
|
|
||||||
* @E-mail: joshua.yin@ucloud.cn
|
|
||||||
* @date: 2018-11-29 15:07
|
|
||||||
*/
|
|
||||||
public class ParameterValidator {
|
public class ParameterValidator {
|
||||||
/**
|
/**
|
||||||
* 校验器工厂
|
* 校验器工厂
|
||||||
*/
|
*/
|
||||||
private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||||
|
|
||||||
public static <T> void validator(T obj) throws ValidatorException {
|
public static <T> void validator(T obj) throws ValidatorException {
|
||||||
Validator validator = factory.getValidator();
|
Validator validator = factory.getValidator();
|
||||||
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
|
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
|
||||||
Iterator<ConstraintViolation<T>> it = constraintViolations.iterator();
|
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
|
||||||
while (it.hasNext())
|
throw new ValidatorException(constraintViolation.getMessage());
|
||||||
throw new ValidatorException(it.next().getMessage());
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user