|
@@ -104,6 +104,19 @@ public class SignatureInfo {
|
|
return Base64Utils.encode(ShaUtils.sha1(StringUtils.join(values, PARAM_JOINER)));
|
|
return Base64Utils.encode(ShaUtils.sha1(StringUtils.join(values, PARAM_JOINER)));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// /**
|
|
|
|
+// * 基于解析好的签名对象,使用传入的保密信息进行签名内容验证
|
|
|
|
+// *
|
|
|
|
+// * @param secret
|
|
|
|
+// * @return
|
|
|
|
+// */
|
|
|
|
+// public boolean validate(String secret) {
|
|
|
|
+// if (method != null && uri != null && timestamp >= 0 && secret != null && ciphertext != null) {
|
|
|
|
+// return encrypt(method, uri, String.valueOf(timestamp), secret).equals(ciphertext);
|
|
|
|
+// }
|
|
|
|
+// return false;
|
|
|
|
+// }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 基于解析好的签名对象,使用传入的保密信息进行签名内容验证
|
|
* 基于解析好的签名对象,使用传入的保密信息进行签名内容验证
|
|
*
|
|
*
|
|
@@ -111,42 +124,89 @@ public class SignatureInfo {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public boolean validate(String secret) {
|
|
public boolean validate(String secret) {
|
|
- if (method != null && uri != null && timestamp >= 0 && secret != null && ciphertext != null) {
|
|
|
|
- return encrypt(method, uri, String.valueOf(timestamp), secret).equals(ciphertext);
|
|
|
|
|
|
+ if (secret != null && ciphertext != null) {
|
|
|
|
+ return encrypt(secret).equals(ciphertext);
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// /**
|
|
|
|
+// * 根据标准参数构造最终的签名字符串
|
|
|
|
+// *
|
|
|
|
+// * @param type
|
|
|
|
+// * @param method
|
|
|
|
+// * @param uri
|
|
|
|
+// * @param timestamp
|
|
|
|
+// * @param invoker
|
|
|
|
+// * @param secret
|
|
|
|
+// * @return
|
|
|
|
+// */
|
|
|
|
+// public static String build(SignatureType type, String method, String uri, long timestamp, String invoker, String secret) {
|
|
|
|
+// if (type == null || method == null || uri == null || timestamp <= 0 || invoker == null || secret == null) {
|
|
|
|
+// return "";
|
|
|
|
+// }
|
|
|
|
+// return MessageFormat.format(PATTERN, type.getName(), invoker, FIELD_JOINER,
|
|
|
|
+// encrypt(method.toLowerCase(), uri, String.valueOf(timestamp), secret));
|
|
|
|
+// }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 根据标准参数构造最终的签名字符串
|
|
* 根据标准参数构造最终的签名字符串
|
|
*
|
|
*
|
|
* @param type
|
|
* @param type
|
|
- * @param method
|
|
|
|
- * @param uri
|
|
|
|
- * @param timestamp
|
|
|
|
* @param invoker
|
|
* @param invoker
|
|
* @param secret
|
|
* @param secret
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public static String build(SignatureType type, String method, String uri, long timestamp, String invoker, String secret) {
|
|
|
|
- if (type == null || method == null || uri == null || timestamp <= 0 || invoker == null || secret == null) {
|
|
|
|
|
|
+ public static String build(SignatureType type, String invoker, String secret) {
|
|
|
|
+ if (type == null || invoker == null || secret == null) {
|
|
return "";
|
|
return "";
|
|
}
|
|
}
|
|
return MessageFormat.format(PATTERN, type.getName(), invoker, FIELD_JOINER,
|
|
return MessageFormat.format(PATTERN, type.getName(), invoker, FIELD_JOINER,
|
|
- encrypt(method.toLowerCase(), uri, String.valueOf(timestamp), secret));
|
|
|
|
- }
|
|
|
|
|
|
+ encrypt(secret));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+// /**
|
|
|
|
+// * 根据当前接口的的基本信息、header中的时间戳与签名字符串,尝试解析并构造签名数据对象
|
|
|
|
+// *
|
|
|
|
+// * @param method
|
|
|
|
+// * @param uri
|
|
|
|
+// * @param timestamp
|
|
|
|
+// * @param signature
|
|
|
|
+// * @return
|
|
|
|
+// */
|
|
|
|
+// public static SignatureInfo parse(String method, String uri, long timestamp, String signature) {
|
|
|
|
+// if (method == null || uri == null || timestamp <= 0 || signature == null) {
|
|
|
|
+// return null;
|
|
|
|
+// }
|
|
|
|
+// String[] values = StringUtils.split(signature);
|
|
|
|
+// if (values != null && values.length == 2) {
|
|
|
|
+// SignatureType type = typeMap.get(values[0]);
|
|
|
|
+// if (type != null) {
|
|
|
|
+// String[] array = StringUtils.split(values[1], FIELD_JOINER);
|
|
|
|
+// if (array != null && array.length == 2) {
|
|
|
|
+// SignatureInfo info = new SignatureInfo();
|
|
|
|
+// info.setType(type);
|
|
|
|
+// info.setMethod(method.toLowerCase());
|
|
|
|
+// info.setUri(uri);
|
|
|
|
+// info.setTimestamp(timestamp);
|
|
|
|
+// info.setInvoker(array[0]);
|
|
|
|
+// info.setCiphertext(array[1]);
|
|
|
|
+// return info;
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// return null;
|
|
|
|
+// }
|
|
|
|
|
|
/**
|
|
/**
|
|
* 根据当前接口的的基本信息、header中的时间戳与签名字符串,尝试解析并构造签名数据对象
|
|
* 根据当前接口的的基本信息、header中的时间戳与签名字符串,尝试解析并构造签名数据对象
|
|
*
|
|
*
|
|
- * @param method
|
|
|
|
- * @param uri
|
|
|
|
* @param timestamp
|
|
* @param timestamp
|
|
* @param signature
|
|
* @param signature
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public static SignatureInfo parse(String method, String uri, long timestamp, String signature) {
|
|
|
|
- if (method == null || uri == null || timestamp <= 0 || signature == null) {
|
|
|
|
|
|
+ public static SignatureInfo parse(String signature) {
|
|
|
|
+ if (signature == null) {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
String[] values = StringUtils.split(signature);
|
|
String[] values = StringUtils.split(signature);
|
|
@@ -157,9 +217,9 @@ public class SignatureInfo {
|
|
if (array != null && array.length == 2) {
|
|
if (array != null && array.length == 2) {
|
|
SignatureInfo info = new SignatureInfo();
|
|
SignatureInfo info = new SignatureInfo();
|
|
info.setType(type);
|
|
info.setType(type);
|
|
- info.setMethod(method.toLowerCase());
|
|
|
|
- info.setUri(uri);
|
|
|
|
- info.setTimestamp(timestamp);
|
|
|
|
|
|
+// info.setMethod(method.toLowerCase());
|
|
|
|
+// info.setUri(uri);
|
|
|
|
+// info.setTimestamp(timestamp);
|
|
info.setInvoker(array[0]);
|
|
info.setInvoker(array[0]);
|
|
info.setCiphertext(array[1]);
|
|
info.setCiphertext(array[1]);
|
|
return info;
|
|
return info;
|
|
@@ -170,26 +230,26 @@ public class SignatureInfo {
|
|
}
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
- SignatureInfo source = new SignatureInfo();
|
|
|
|
- source.setType(SignatureType.TOKEN);
|
|
|
|
-// source.setMethod("POST");
|
|
|
|
- source.setMethod("GET");
|
|
|
|
- source.setUri("/api/admin/invigilate/list");
|
|
|
|
- source.setTimestamp(System.currentTimeMillis());
|
|
|
|
- source.setInvoker("3_STUDENT_pc");
|
|
|
|
- source.setSecret("R4IYArPwnU9hbeBev6CDDNC0S126sdb3");
|
|
|
|
- System.out.println(source.getTimestamp());
|
|
|
|
- long start = System.currentTimeMillis();
|
|
|
|
- String signature = SignatureInfo
|
|
|
|
- .build(source.getType(), source.getMethod(), source.getUri(), source.getTimestamp(), source.getInvoker(),
|
|
|
|
- source.getSecret());
|
|
|
|
- System.out.println("signature:" + signature + "\ntime cost=" + (System.currentTimeMillis() - start));
|
|
|
|
-
|
|
|
|
- start = System.currentTimeMillis();
|
|
|
|
- SignatureInfo parse = SignatureInfo.parse(source.getMethod(), source.getUri(), source.getTimestamp(), signature);
|
|
|
|
- System.out.println(
|
|
|
|
- "validate:" + (parse != null && parse.validate(source.getSecret())) + "\ntime cost=" + (System.currentTimeMillis()
|
|
|
|
- - start));
|
|
|
|
|
|
+// SignatureInfo source = new SignatureInfo();
|
|
|
|
+// source.setType(SignatureType.TOKEN);
|
|
|
|
+//// source.setMethod("POST");
|
|
|
|
+// source.setMethod("GET");
|
|
|
|
+// source.setUri("");
|
|
|
|
+// source.setTimestamp(System.currentTimeMillis());
|
|
|
|
+// source.setInvoker("3_STUDENT_pc");
|
|
|
|
+// source.setSecret("R4IYArPwnU9hbeBev6CDDNC0S126sdb3");
|
|
|
|
+// System.out.println(source.getTimestamp());
|
|
|
|
+// long start = System.currentTimeMillis();
|
|
|
|
+// String signature = SignatureInfo
|
|
|
|
+// .build(source.getType(), source.getMethod(), source.getUri(), source.getTimestamp(), source.getInvoker(),
|
|
|
|
+// source.getSecret());
|
|
|
|
+// System.out.println("signature:" + signature + "\ntime cost=" + (System.currentTimeMillis() - start));
|
|
|
|
+//
|
|
|
|
+// start = System.currentTimeMillis();
|
|
|
|
+// SignatureInfo parse = SignatureInfo.parse(source.getMethod(), source.getUri(), source.getTimestamp(), signature);
|
|
|
|
+// System.out.println(
|
|
|
|
+// "validate:" + (parse != null && parse.validate(source.getSecret())) + "\ntime cost=" + (System.currentTimeMillis()
|
|
|
|
+// - start));
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|