hz-zhhq-app-service/greenH5modul/.svn/pristine/78/7889d68d8e5764f3d15c7984a30...

129 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.nationalelectric.greenH5.identityAuth.util;
import com.nationalelectric.greenH5.identityAuth.util.devon.Assertion;
import com.nationalelectric.greenH5.identityAuth.util.devon.secure.Md5Utils;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* HMAC: upperCase(hash(urlEncode(query + "&appKey=MyAppKey", "UTF-8")))
*
* @author <a href="mailto:93785732@qq.com">ZhengDaHong@fzfx</a>
* @since 2018/1/31 17:02
* @see javax.crypto.Mac Don't use Java standard algorithmn, because of not in favor of cross-platform
*/
// TODO: 2018/4/3 Add 'timestamp' factor to expiration validation
//public abstract class SignatureUtils {
public class SignatureUtils2 {
private static final String ENCODING = "UTF-8";
static final String PARAMETER_SIGNATURE = "signature";
static final String PARAMETER_SIGNATURE_TYPE = "signatureType";
private static final String[] NON_SIGNATURE_FACTORS = {
PARAMETER_SIGNATURE
};
public static String aaa(){
return "aaa";
}
/**
* Convenience method for {@link #buildSignature(TreeMap, String, SignatureType)} to accepting any {@code Map}s
* @since 2018/04/19 11:42
*/
public static String buildSignature2(Map<String, String> orderingMap, String appKey, String signatureType) throws Exception {
System.out.println("10000000000000000");
TreeMap<String, String> orderingMapToUse;
System.out.println("123333334354ty53uterhfgsd");
if(orderingMap instanceof TreeMap){
System.out.println(";lkjhgfdsadfghgf");
orderingMapToUse = (TreeMap<String, String>) orderingMap;
}
else{
System.out.println("auisldasdkasfsjk");
orderingMapToUse = new TreeMap<String, String>(orderingMap);
}
// return buildSignature3(orderingMapToUse, appKey, signatureType);
return buildSignature4(orderingMapToUse, appKey, signatureType);
// return aaa();
}
public static String buildSignature4(TreeMap<String, String> orderingMap, String appKey, String signatureType) {
StringBuilder stringToSign = new StringBuilder(orderingMap.size() * 10);
boolean first = true;
outer: for (Map.Entry<String, String> entry : orderingMap.entrySet()) {
for (String nonSignatureFactor : NON_SIGNATURE_FACTORS) {
if(nonSignatureFactor.equals(entry.getKey())){
continue outer;
}
}
if(!first){
stringToSign.append('&');
}else{
first = false;
}
stringToSign.append(entry.getKey()).append('=').append(entry.getValue());
}
stringToSign.append("&appKey=").append(appKey);
try {
// 通过URL-encoding得到ASCII字符(兼容)因此不惧在任何时候的getBytes()
return Md5Utils.md5WithUpperCase(URLEncoder.encode(stringToSign.toString(), ENCODING));
} catch (Exception impossible) {
return null;
}
}
public static String buildSignature3(TreeMap<String, String> orderingMap, String appKey, String signatureType) {
StringBuilder stringToSign = new StringBuilder(orderingMap.size() * 10);
boolean first = true;
outer: for (Map.Entry<String, String> entry : orderingMap.entrySet()) {
for (String nonSignatureFactor : NON_SIGNATURE_FACTORS) {
if(nonSignatureFactor.equals(entry.getKey())){
continue outer;
}
}
if(!first){
stringToSign.append('&');
}else{
first = false;
}
stringToSign.append(entry.getKey()).append('=').append(entry.getValue());
}
stringToSign.append("&appKey=").append(appKey);
switch (signatureType){
case "MD5":{
try {
// 通过URL-encoding得到ASCII字符(兼容)因此不惧在任何时候的getBytes()
return Md5Utils.md5WithUpperCase(URLEncoder.encode(stringToSign.toString(), ENCODING));
} catch (UnsupportedEncodingException impossible) {
}
}
default: return null;
}
}
}