Ver código fonte

[电表][修复]:通信增加签名校验

release_toaliyun_real
hupeng 6 anos atrás
pai
commit
59b5c2229f
2 arquivos alterados com 30 adições e 3 exclusões
  1. +29
    -3
      mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java
  2. +1
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java

+ 29
- 3
mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java Ver arquivo

@@ -11,9 +11,14 @@ import com.iformall.enums.EnumBoxRegisterStatus;
import com.iformall.service.kw.KwBoxCmdHistoryService;
import com.iformall.service.kw.KwBoxService;

import com.iformall.utils.HashUtil;
import com.iformall.utils.Utility;
import com.sun.crypto.provider.HmacSHA1;
import io.netty.util.internal.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.digest.HmacAlgorithms;
import org.apache.commons.codec.digest.HmacUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -82,6 +87,7 @@ public class KwBoxV1Controller extends BaseController {
record.setUpdateTime(new Date());
record.setRegisterTime(new Date());
record.setLastOnlineTime(new Date());
record.setComKey(Utility.generate32UUID());
record.setRegisterStatus(EnumBoxRegisterStatus.REGISTERED.getCode());
kwBoxService.saveOrUpdate(record);
Map<String,Object> data = new HashMap<>();
@@ -98,7 +104,20 @@ public class KwBoxV1Controller extends BaseController {

}

private ResultData cmdLogin(String imei, String ccid, Date deviceTime, Map<String,Object> paramMap)
private boolean checkSign(KwBox kwBox, Map<String,Object> paramMap, String sign) {
HmacUtils hmacUtils = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, kwBox.getComKey());
String content = JSONObject.toJSON(paramMap).toString();
String signCom = hmacUtils.hmacHex(content);

boolean res = signCom.equalsIgnoreCase(sign);

if (!res) {
logger.warn("SIGN check failed." + "content:"+content +"\n" + "signCom:" + signCom);
}
return res;
}

private ResultData cmdLogin(String imei, String ccid, Date deviceTime, Map<String,Object> paramMap, String sign)
{
KwBox kwBox = kwBoxService.findByImei(imei);

@@ -108,6 +127,9 @@ public class KwBoxV1Controller extends BaseController {
if (!kwBox.getRegisterStatus().equals(EnumBoxRegisterStatus.REGISTERED.getCode()))
return new ResultData(ErrorCode.DEVICE_NOT_FOUND);

if (!checkSign(kwBox, paramMap, sign))
return new ResultData(ErrorCode.DEVICE_SIGN_INVALID);

saveCmd(kwBox.getTenantId(),KwBoxService.CMD_LOGIN,imei,ccid,deviceTime,paramMap);

KwBox record = new KwBox();
@@ -124,7 +146,7 @@ public class KwBoxV1Controller extends BaseController {



private ResultData cmdHb(String imei, String ccid, Date deviceTime, Map<String,Object> paramMap)
private ResultData cmdHb(String imei, String ccid, Date deviceTime, Map<String,Object> paramMap, String sign)
{
KwBox kwBox = kwBoxService.findByImei(imei);
if (kwBox == null)
@@ -133,6 +155,9 @@ public class KwBoxV1Controller extends BaseController {
if (!kwBox.getRegisterStatus().equals(EnumBoxRegisterStatus.REGISTERED.getCode()))
return new ResultData(ErrorCode.DEVICE_NOT_FOUND);

if (!checkSign(kwBox, paramMap, sign))
return new ResultData(ErrorCode.DEVICE_SIGN_INVALID);

saveCmd(kwBox.getTenantId(),KwBoxService.CMD_HEARTBEAT,imei,ccid,deviceTime,paramMap);

KwBox record = new KwBox();
@@ -178,7 +203,8 @@ public class KwBoxV1Controller extends BaseController {

@ApiOperation("开物盒子V1")
@PostMapping("command")
public Result command(@RequestBody Map<String,Object> paramMap) {
public Result command(@RequestBody Map<String,Object> paramMap,@RequestParam String sign) {


String cmd = (String)paramMap.get(KwBoxService.PREFIX_CMD);
if (StringUtil.isNullOrEmpty(cmd))


+ 1
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Ver arquivo

@@ -409,6 +409,7 @@ public enum ErrorCode{
DEVICE_QRCODE_GET_FAILED(26002, "微信二维码生成失败,请重试"),
DEVICE_REACHED_MAX_NUMBER(26003, "设备已经达到最大数量"),
DEVICE_HAS_BEEN_BOUND(26004, "设备已经绑定到其他商户"),
DEVICE_SIGN_INVALID(26005, "设备签名无效"),
/**
* 消息组件
*/


Carregando…
Cancelar
Salvar