HTTP接口安全

打印 上一主题 下一主题

主题 579|帖子 579|积分 1737

HTTP Header 增加字段
  1. @ResponseBody
  2.     public OfflineQRCodeResp OfflineQRCode(@RequestHeader("Authorization") String token,@RequestHeader("nonce") String nonce,
  3.                     @RequestHeader("timestamp") String timestamp,
  4.                     @RequestHeader("signature") String signature,
  5.                     @RequestBody OfflineQRCodeReq in){
  6.             GlobalVars.IncreaseApiCallCount();
  7.             OfflineQRCodeResp resp = new OfflineQRCodeResp();
  8.             //--------------------- 验证签名 ----------------------
  9.             VerifySignatureReturn verifySignatureReturn = nonceService.verifySignature(nonce, timestamp,  in.toString(), signature);
  10.                 if (!verifySignatureReturn.isbSuccess()) {
  11.                         resp.setCode(201);
  12.                     resp.setMessage("签名验证失败," + verifySignatureReturn.getMessage());       
  13.                     resp.setTimestamp(in.getTimestamp());
  14.                     return resp;
  15.                 }
  16.                
复制代码
验证签名
  1. @Override
  2.         public VerifySignatureReturn verifySignature(String nonce, String timestamp, String requestParams, String strClientSignValue) {
  3.                 VerifySignatureReturn verifySignatureReturn = new VerifySignatureReturn();
  4.                 boolean ret = false;
  5.                 if (safe_enable == 0) {
  6.                         verifySignatureReturn.setbSuccess(true);
  7.                         return verifySignatureReturn;
  8.                 }
  9.                
  10.                 // ------------- 时间戳 过期时间验证 --------------------
  11.                 long lngTimeStamp = Long.parseLong(timestamp);
  12.                 long lngCurTimeStamp = (new Date()).getTime();
  13.                 long lngOffset = 0;
  14.                
  15.                 lngOffset = Math.abs(lngCurTimeStamp - lngTimeStamp);
  16.                 if (lngOffset > 1000 * safe_expire) {
  17.                         verifySignatureReturn.setbSuccess(false);
  18.                        
  19.                         SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  20.                         String strTimeString = sdf.format(new Date(Long.parseLong(String.valueOf(lngTimeStamp))));  
  21.                         verifySignatureReturn.setMessage("时间戳过期,差值=" + lngOffset + ",时间戳时间: " + strTimeString);
  22.                         return verifySignatureReturn;
  23.                 }
  24.                
  25.                 // ---------------- 随机数 验证 ---------------------
  26.                 if (safe_nonce == 1) {
  27.                         String cacheNonceString = cacheService.get(nonce);
  28.                         if (cacheNonceString == null) {
  29.                                 cacheService.put(nonce);
  30.                         }else {
  31.                                 verifySignatureReturn.setbSuccess(false);
  32.                                 verifySignatureReturn.setMessage("随机数失效");
  33.                                 return verifySignatureReturn;
  34.                         }
  35.                 }
  36.                
  37.                 // ---------------- 签名验证 ------------------------
  38.                 String strSignValue = SignatureUitl.getSignature(nonce, timestamp, requestParams);
  39.                 if (strClientSignValue.equalsIgnoreCase(strSignValue) == false) {
  40.                         logger.info("签名验证失败,正确的签名: " + strSignValue);
  41.                         verifySignatureReturn.setbSuccess(false);
  42.                         verifySignatureReturn.setMessage("signature invalid.");
  43.                         return verifySignatureReturn;
  44.                 }
  45.                
  46.                 verifySignatureReturn.setbSuccess(true);
  47.                 return verifySignatureReturn;
  48.         }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表