From 5a714918d158113c1a76a9a6620e101b4310a83e Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 16 七月 2019 16:08:33 +0800 Subject: [PATCH] 防止微信号与手机号重复注册 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 185 ++++++++++++++++++++++++++++----------------- 1 files changed, 114 insertions(+), 71 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java index f1568d3..8919295 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java +++ b/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 { @@ -66,7 +69,7 @@ @Resource private UserInfoMapper userInfoMapper; - + @Resource private UserInfoService userInfoService; @@ -99,10 +102,12 @@ @Resource private UserAccountBindingHistoryService userAccountBindingHistoryService; - + @Resource private UserInfoDeleteRecordService userInfoDeleteRecordService; - + + @Resource + private JedisPool jedisPool; @Transactional @Override @@ -548,8 +553,7 @@ int addCount = 0; 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,31 +979,51 @@ // 娓呯悊娆℃暟 redisManager.removeCommonString("sendMSNLoginCount" + phone); - // 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴� - UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone); - if (userInfo != null) { - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType, request); - } else { - userInfo = new UserInfo(); - userInfo.setAppId(appId); - userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); - userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - userInfo.setPhone(phone); - userInfo.setLoginType(loginType); - userInfo.setState(UserInfo.STATE_NORMAL); - // 鍒涘缓鐢ㄦ埛 - addUser(userInfo); + // 閲囩敤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) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + } else { + userInfo = new UserInfo(); + userInfo.setAppId(appId); + userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); + userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); + userInfo.setPhone(phone); + userInfo.setLoginType(loginType); + userInfo.setState(UserInfo.STATE_NORMAL); + // 鍒涘缓鐢ㄦ埛 + addUser(userInfo); - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(userInfo.getId()); - } catch (Exception e) { - e.printStackTrace(); + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return userInfo; } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.unwatch(); + jedisPool.returnResource(jedis); } - - return userInfo; + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } @Transactional @@ -1025,39 +1051,61 @@ throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); } - UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - if (userInfo != null) { - LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType, request); - // 鍒犻櫎閭�璇峰垎浜浘 - spreadUserImgService.deleteImgUrl(userInfo.getId()); - } else { - LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid()); - // 鍒涘缓鏂拌处鎴� - userInfo = new UserInfo(); - userInfo.setPortrait(weiXinUser.getHeadimgurl()); - userInfo.setAppId(appId); - userInfo.setNickName(weiXinUser.getNickname()); - userInfo.setWxName(weiXinUser.getNickname()); - userInfo.setWxOpenId(weiXinUser.getOpenid()); - userInfo.setWxUnionId(weiXinUser.getUnionid()); - userInfo.setWxPic(weiXinUser.getHeadimgurl()); - userInfo.setLastLoginTime(System.currentTimeMillis()); - userInfo.setLoginType(loginType); - userInfo.setLastLoginIp(request.getRemoteHost()); - userInfo.setState(UserInfo.STATE_NORMAL); - addUser(userInfo); + // 閲囩敤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 { - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(userInfo.getId()); - } catch (Exception e) { - e.printStackTrace(); + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) { + LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(userInfo.getId()); + } else { + LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid()); + // 鍒涘缓鏂拌处鎴� + userInfo = new UserInfo(); + userInfo.setPortrait(weiXinUser.getHeadimgurl()); + userInfo.setAppId(appId); + userInfo.setNickName(weiXinUser.getNickname()); + userInfo.setWxName(weiXinUser.getNickname()); + userInfo.setWxOpenId(weiXinUser.getOpenid()); + userInfo.setWxUnionId(weiXinUser.getUnionid()); + userInfo.setWxPic(weiXinUser.getHeadimgurl()); + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfo.setLoginType(loginType); + userInfo.setLastLoginIp(request.getRemoteHost()); + userInfo.setState(UserInfo.STATE_NORMAL); + addUser(userInfo); + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return userInfo; } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.unwatch(); + jedisPool.returnResource(jedis); } - return userInfo; + 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); @@ -1197,7 +1243,7 @@ currentInfo.setState(UserInfo.STATE_FORBIDDEN); currentInfo.setStateDesc(reason); userInfoService.updateByPrimaryKeySelective(currentInfo); - + // 鎻掑叆璁板綍 userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason); @@ -1251,15 +1297,14 @@ } } } - - + @Override public void forbiddenUser(Long uid, String reason) { UserInfo currentInfo = userInfoService.selectByPKey(uid); if (currentInfo == null) { return; } - + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { return; } @@ -1267,19 +1312,18 @@ currentInfo.setState(UserInfo.STATE_FORBIDDEN); currentInfo.setStateDesc(reason); userInfoService.updateByPrimaryKeySelective(currentInfo); - + // 鎻掑叆璁板綍 userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason); } - - + @Override public void DeleteUser(Long uid, String reason) { UserInfo currentInfo = userInfoService.selectByPKey(uid); if (currentInfo == null) { return; } - + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { return; } @@ -1290,15 +1334,14 @@ // 鎻掑叆璁板綍 userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE, reason); } - - + @Override public void DeleteUserOutOfDate(Long uid, String reason) { UserInfo currentInfo = userInfoService.selectByPKey(uid); if (currentInfo == null) { return; } - + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { return; } -- Gitblit v1.8.0