Controller外部接口调用方式设计,sign签名规则
Controller外部接口调用方式设计,sign签名规则
//请求头
accept:*/* connection:Keep-Alive user-agent:My-test3 Accept-Charset:UTF-8 Content-Type:application/x-www-form-urlencoded
如果使用x-www-form-urlencoded 传参方式,则使用请求头:My-test1 & My-test2
如果使用json 传参方式,则使用请求头:My-test3
//接收源代码:
protected static ObjectMapper mapper = new ObjectMapper(); if ("My-test1".equals(userAgent) || "My-test2".equals(userAgent)) {//非json格式报文 dataMap = this.parseFormParams(reqContent); } else { //json字符串的方式 转换为TreeMap dataMap = mapper.readValue(reqContent, TreeMap.class); } //解析RUL形式的参数 public static Map<String,Object> parseFormParams(String reqContent){//platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3 Map<String,Object> map = new TreeMap<>(); StringTokenizer st = new StringTokenizer(reqContent,"&"); while(st.hasMoreTokens()){ String param = st.nextToken(); int idx = param.indexOf("="); String key = param.substring(0,idx); String val = param.substring(idx+1); map.put(key, val); } return map; }
//签名规则:
StringBuffer sbff = new StringBuffer(); Map<String, Object> dataMap = new TreeMap<>(); //有序,必须有序,否则计算出来的md5 sign字符串不同,验签不通过。 dataMap.put("orderNo","1111222333"); dataMap.put("status","1"); for (Map.Entry<String, Object> m : dataMap.entrySet()) { sbff.append(m.getKey()).append(m.getValue()); } String key = sbff.toString().toUpperCase() + "key字符串"; String md5str = md5Encode(key); System.out.println("md5str="+md5str);
package com.example.core.mydemo.java3; import java.util.Map; import java.util.StringTokenizer; import java.util.TreeMap; /** * {platenum=沪A00250, sign=1d1b3befd94733a943720f7d3c2fa4a3} * dataMap={orderNo=1111222333, status=1} * dataMap2={orderNo=2111222333, status=2} */ public class TreeMapTest { public static void main(String[] args) { String ss = "platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3"; System.out.println(parseFormParams(ss)); Map<String, Object> dataMap = new TreeMap<>(); //有序 dataMap.put("orderNo","1111222333"); dataMap.put("status","1"); Map<String, Object> dataMap2 = new TreeMap<>(); //有序 dataMap2.put("status","2"); dataMap2.put("orderNo","2111222333"); System.out.println("dataMap="+dataMap); System.out.println("dataMap2="+dataMap2); } public static Map<String,Object> parseFormParams(String reqContent){//platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3 Map<String,Object> map = new TreeMap<>(); StringTokenizer st = new StringTokenizer(reqContent,"&"); while(st.hasMoreTokens()){ String param = st.nextToken(); int idx = param.indexOf("="); String key = param.substring(0,idx); String val = param.substring(idx+1); map.put(key, val); } return map; } }