Java接口签名(Signature)实现方案大家好,我是田程序员!今天早上,我接到一个请求,要为当前系统开发一个开放接口。由于是对外开放的,调用方肯定没有我们系统的Token,所以调用方需要进行签名验证。签名验证采用主流的验证方式,使用Signature方法。一、需求具体需求如下图所示二、流程1.离线分配appid和appsecret,给不同的调用者分配不同的appid和appsecret 2.添加timestamp(时间戳),10分钟内数据有效 3.添加序列号noncestr(防止重复提交),至少10位。对于查询接口,序列号只用于日志登陆,方便后期日志校验。对于处理接口,需要验证序列号在有效期内的唯一性,避免重复请求。 4。添加签名,所有数据的签名信息。3.实现简单来说就是在body中传递调用接口的业务参数,在header中增加四个附加参数signature、appkey、timestamp、noncestr。我们在后台获取四个参数,最后三个参数加上调用方分配的appSecret,经过字典排序,MD5加密,然后与第一个参数签名进行比对,即表示调用方有调用权限。以下代码是接口校验签名的demo实现://referencejacksondepends@AutowiredprivateObjectMapperobjectMapper;@Value("${appsecret}")privateStringappSecret;/***验证签名*@parampreInfoItem*@return*/booleancheckSignature(PreInfoItempreInfoItem)throwsJsonProcessingException,IllegalAccessException{Stringsignature="signature";字符串appkey="appkey";字符串时间戳=“时间戳”;字符串noncestr="noncestr";HttpServletRequestrequest=ServletUtils.getRequestad(=request.getHeader(signature);StringheaderAppkey=request.getHeader(appkey);StringheaderTimestamp=request.getHeader(timestamp);StringheaderNoncestr=request.getHeader(noncestr);//因为排序是需要,直接用TreeMapMap
