校验时间戳和签名(转)

https://blog.csdn.net/riju4713/article/details/81457479


校验时间戳和签名

2018年08月06日 18:52:25 慕容潇湘 阅读数 2778

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/riju4713/article/details/81457479

1.获取url链接里面的时间戳和签名 

// 时间戳

Stringtimestamp = qpMap.get("timestamp");

// 签名

Stringsign = qpMap.get("sign");

2.进行校验

// 校验签名前后过期时间

            checkSignTime(timestamp);

// 校验签名

            checkSign(streamStr, timestamp, sign);

privatevoidcheckSignTime(String timestamp){

if(StringUtils.isBlank(timestamp)) {

//logger.error("{}-鉴权时间戳缺失", MsgCode.SIGN_PARAM_ERROR_CODE);

thrownewBusinessException(MsgCode.SIGN_PARAM_ERROR_MSG, MsgCode.SIGN_PARAM_ERROR_CODE);

        }

longcurrentTime = System.currentTimeMillis() /1000;// 统一都传毫秒

longrequestTime =0;

try{

            requestTime = Long.parseLong(timestamp);

}catch(NumberFormatException e) {

//logger.error("{}-鉴权时间戳错误 timestamp:{}", MsgCode.SIGN_PARAM_ERROR_CODE, timestamp);

thrownewBusinessException(MsgCode.SIGN_PARAM_ERROR_MSG, MsgCode.SIGN_PARAM_ERROR_CODE);

        }

if(Math.abs(currentTime - requestTime) > APPIConstants.Filter.OUT_OF_DATE_TIME_LONG) {

logger.error("{}-签名已过期,服务器当前时间:{}", MsgCode.OUT_OF_DATE_SIGN_CODE, currentTime);

thrownewBusinessException(String.format(MsgCode.OUT_OF_DATE_SIGN_MSG, currentTime), MsgCode.OUT_OF_DATE_SIGN_CODE);

        }

    }

if(StringUtils.isBlank(sign)) {

//logger.error("{}-签名为空", MsgCode.SIGN_PARAM_ERROR_CODE);

thrownewBusinessException(MsgCode.SIGN_PARAM_ERROR_MSG, MsgCode.SIGN_PARAM_ERROR_CODE);

        }

// 验证签名

          streamStr = Base64.encode(streamStr);

if(!SignUtil.checkSign(streamStr, APPIConstants.Filter.key, timestamp, sign)) {

//logger.error("{}-签名错误", MsgCode.SIGN_ERR_CODE);

thrownewBusinessException(MsgCode.SIGN_ERR_MSG, MsgCode.SIGN_ERR_CODE);

        }

    }

验证工具类: 

publicclassSignUtil{

privatefinalstaticLogger logger = LoggerFactory.getLogger(SignUtil.class);

/**

*@Description验证签名

*@paramcontent 验签内容

*@paramkey 签名key值

*@paramadditionContent 附加的签名信息

*@paramsign 待验证的签名

*/

publicstaticbooleancheckSign(String content, String key, String additionContent, String sign){

if(StringUtils.isBlank(sign)) {

returnfalse;

}

String _sign = createSign(content, key, additionContent);

if(sign.equalsIgnoreCase(_sign)) {

returntrue;

}

logger.error("参数sign:{},验签sign:{}", sign, _sign);

returnfalse;

}

/**

*@Description生成签名

*@paramcontent 签名内容

*@paramkey 签名key值

*/

publicstaticStringcreateSign(String content, String key, String additionContent){

if(StringUtils.isEmpty(additionContent)){

returnMD5Util.getMd5(content + key);

}else{

returnMD5Util.getMd5(content + key + additionContent);

}

}

}

你可能感兴趣的:(校验时间戳和签名(转))