|
@@ -14,9 +14,12 @@ import com.qunzhixinxi.hnqz.admin.service.SysUserService;
|
|
import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
|
|
import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
|
|
import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
|
+import org.springframework.data.redis.core.script.DefaultRedisScript;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
@@ -24,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
|
|
+import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -42,7 +46,7 @@ public class SysUserSignCertController {
|
|
|
|
|
|
private final SysUserService sysUserService;
|
|
private final SysUserService sysUserService;
|
|
|
|
|
|
- private final RedisTemplate redisTemplate;
|
|
|
|
|
|
+ private final RedisTemplate<String, Object> redisTemplate;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 保存银行卡信息
|
|
* 保存银行卡信息
|
|
@@ -163,6 +167,21 @@ public class SysUserSignCertController {
|
|
@SysLog("用户签约认证")
|
|
@SysLog("用户签约认证")
|
|
@PostMapping("/batch-channel-cert")
|
|
@PostMapping("/batch-channel-cert")
|
|
public R<?> batchChannelCert(@RequestBody UserSignCertDTO userSignCertDTO) {
|
|
public R<?> batchChannelCert(@RequestBody UserSignCertDTO userSignCertDTO) {
|
|
|
|
+
|
|
|
|
+ //1、验证令牌是否合法【令牌的对比和删除必须保证原子性】
|
|
|
|
+ HnqzUser finaAdmin = SecurityUtils.getUser();
|
|
|
|
+ final String REDIS_DEL_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
|
|
|
|
+ Long execute = redisTemplate.execute(new DefaultRedisScript<>(REDIS_DEL_SCRIPT, Long.class),
|
|
|
|
+ Collections.singletonList(String.format("%d:batch_channel_cert:%d:token", finaAdmin.getTenantId(), finaAdmin.getId())), userSignCertDTO.getToken());
|
|
|
|
+ // 通过EVAL脚本原子验证令牌和删除令牌
|
|
|
|
+ boolean oops = (execute != null && execute == 0);
|
|
|
|
+
|
|
|
|
+ // 令牌验证失败
|
|
|
|
+ if (oops) {
|
|
|
|
+ log.error(String.format("提交 TOKEN 不正确:%s", userSignCertDTO.getToken()));
|
|
|
|
+ return R.failed("提交 TOKEN 不正确,请刷新页面重试");
|
|
|
|
+ }
|
|
|
|
+
|
|
if (userSignCertDTO.getUserId() == null) {
|
|
if (userSignCertDTO.getUserId() == null) {
|
|
return R.failed("userId不能为空");
|
|
return R.failed("userId不能为空");
|
|
}
|
|
}
|