@ResponseBody
public OfflineQRCodeResp OfflineQRCode(@RequestHeader("Authorization") String token,@RequestHeader("nonce") String nonce,
@RequestHeader("timestamp") String timestamp,
@RequestHeader("signature") String signature,
@RequestBody OfflineQRCodeReq in){
GlobalVars.IncreaseApiCallCount();
OfflineQRCodeResp resp = new OfflineQRCodeResp();
VerifySignatureReturn verifySignatureReturn = nonceService.verifySignature(nonce, timestamp, in.toString(), signature);
if (!verifySignatureReturn.isbSuccess()) {
resp.setCode(201);
resp.setMessage("签名验证失败," + verifySignatureReturn.getMessage());
resp.setTimestamp(in.getTimestamp());
return resp;
}
验证签名
@Override
public VerifySignatureReturn verifySignature(String nonce, String timestamp, String requestParams, String strClientSignValue) {
VerifySignatureReturn verifySignatureReturn = new VerifySignatureReturn();
boolean ret = false;
if (safe_enable == 0) {
verifySignatureReturn.setbSuccess(true);
return verifySignatureReturn;
}
long lngTimeStamp = Long.parseLong(timestamp);
long lngCurTimeStamp = (new Date()).getTime();
long lngOffset = 0;
lngOffset = Math.abs(lngCurTimeStamp - lngTimeStamp);
if (lngOffset > 1000 * safe_expire) {
verifySignatureReturn.setbSuccess(false);
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String strTimeString = sdf.format(new Date(Long.parseLong(String.valueOf(lngTimeStamp))));
verifySignatureReturn.setMessage("时间戳过期,差值=" + lngOffset + ",时间戳时间: " + strTimeString);
return verifySignatureReturn;
}
if (safe_nonce == 1) {
String cacheNonceString = cacheService.get(nonce);
if (cacheNonceString == null) {
cacheService.put(nonce);
}else {
verifySignatureReturn.setbSuccess(false);
verifySignatureReturn.setMessage("随机数失效");
return verifySignatureReturn;
}
}
String strSignValue = SignatureUitl.getSignature(nonce, timestamp, requestParams);
if (strClientSignValue.equalsIgnoreCase(strSignValue) == false) {
logger.info("签名验证失败,正确的签名: " + strSignValue);
verifySignatureReturn.setbSuccess(false);
verifySignatureReturn.setMessage("signature invalid.");
return verifySignatureReturn;
}
verifySignatureReturn.setbSuccess(true);
return verifySignatureReturn;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-06-25 spring配置redis注解缓存
2017-06-25 某某水卡数据算法
2017-06-25 某某水表-M1卡数据算法分析