admin
2019-07-16 5a714918d158113c1a76a9a6620e101b4310a83e
防止微信号与手机号重复注册
3个文件已修改
70 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java
@@ -62,6 +62,7 @@
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import net.sf.json.JSONObject;
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -57,6 +57,9 @@
import com.yeshi.fanli.util.wx.WXLoginUtil;
import net.sf.json.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Transaction;
@Service
public class UserAccountServiceImpl implements UserAccountService {
@@ -103,6 +106,8 @@
    @Resource
    private UserInfoDeleteRecordService userInfoDeleteRecordService;
    
    @Resource
    private JedisPool jedisPool;
    @Transactional
    @Override
@@ -549,7 +554,6 @@
        userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
        
        userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "删除:账号被打通删除");
    }
@@ -671,6 +675,7 @@
    @Override
    public void addUser(UserInfo user) {
        Long maxUid = userInfoMapper.getMaxUid();
        if (maxUid == null)
            maxUid = 100000L;
@@ -698,7 +703,6 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
@@ -952,6 +956,8 @@
            if (!Constant.IS_TEST)
                if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) {
                    throw new UserAccountException(1, "验证码错误,重新输入");
                } else {// 验证码输入正确
                    redisManager.clearSMSVCode(phone, SMSHistory.TYPE_LOGIN);
                }
        }
@@ -973,6 +979,19 @@
        // 清理次数
        redisManager.removeCommonString("sendMSNLoginCount" + phone);
        // 采用redis事务防止一个手机号多次注册问题
        String watchKey = StringUtil.Md5("REGISTER:" + phone);
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.watch(watchKey);
            if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1)
                throw new UserAccountException(10, "请稍后再试");
            Transaction tran = jedis.multi();
            tran.incr(watchKey);
            List<Object> exec = tran.exec();
            if (exec == null || exec.size() == 0) {
                throw new UserAccountException(10, "请稍后再试");
            } else {
        // 查询是否存在该电话历史用户
        UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone);
        if (userInfo != null) {
@@ -996,8 +1015,15 @@
                e.printStackTrace();
            }
        }
        return userInfo;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jedis.unwatch();
            jedisPool.returnResource(jedis);
        }
        throw new UserAccountException(10, "请稍后再试");
    }
    @Transactional
@@ -1024,6 +1050,20 @@
        if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) {
            throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
        }
        // 采用redis事务防止一个微信号多次注册问题
        String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid());
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.watch(watchKey);
            if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1)
                throw new UserAccountException(10, "请稍后再试");
            Transaction tran = jedis.multi();
            tran.incr(watchKey);
            List<Object> exec = tran.exec();
            if (exec == null || exec.size() == 0) {
                throw new UserAccountException(10, "请稍后再试");
            } else {
        UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
        // 直接用的微信登录
@@ -1058,6 +1098,14 @@
            }
        }
        return userInfo;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jedis.unwatch();
            jedisPool.returnResource(jedis);
        }
        throw new UserAccountException(10, "请稍后再试");
    }
    /**
@@ -1182,8 +1230,6 @@
        userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
    }
    @Override
    public void forbiddenUserAll(Long uid, String reason) {
        UserInfo currentInfo = userInfoService.selectByPKey(uid);
@@ -1252,7 +1298,6 @@
        }
    }
    
    @Override
    public void forbiddenUser(Long uid, String reason) {
        UserInfo currentInfo = userInfoService.selectByPKey(uid);
@@ -1272,7 +1317,6 @@
        userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason);
    }
    
    @Override
    public void DeleteUser(Long uid, String reason) {
        UserInfo currentInfo = userInfoService.selectByPKey(uid);
@@ -1290,7 +1334,6 @@
        // 插入记录
        userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE, reason);
    }
    
    @Override
    public void DeleteUserOutOfDate(Long uid, String reason) {
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java
@@ -384,8 +384,6 @@
     */
    public void saveSMSVCode(String phone, int type, String code) {
        if (!Constant.IS_OUTNET)
            return;
        String key = "smscode-" + phone + "-" + type;
        // 保存2分钟
        setString(key, code, 120);
@@ -398,8 +396,8 @@
     * @return
     */
    public String getSMSVCode(String phone, int type) {
        if (!Constant.IS_OUTNET)
            return "";
//        if (!Constant.IS_OUTNET)
//            return "";
        String key = "smscode-" + phone + "-" + type;
        // 保存2分钟
        return getString(key);
@@ -413,8 +411,8 @@
     * @param code
     */
    public void clearSMSVCode(String phone, int type) {
        if (!Constant.IS_OUTNET)
            return;
//        if (!Constant.IS_OUTNET)
//            return;
        String key = "smscode-" + phone + "-" + type;
        removeKey(key);
    }