2026-01-18 06:48:37 +08:00
|
|
|
|
package com.mjlogin.service;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
import java.security.MessageDigest;
|
|
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
2026-03-27 16:25:13 +08:00
|
|
|
|
import org.eclipse.jetty.util.log.Log;
|
|
|
|
|
|
|
2026-06-01 19:24:36 +08:00
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
2026-01-18 06:48:37 +08:00
|
|
|
|
import com.aliyuncs.utils.StringUtils;
|
|
|
|
|
|
import com.data.bean.AccountBean;
|
|
|
|
|
|
import com.data.bean.GameBean;
|
|
|
|
|
|
import com.data.cache.AccountCache;
|
|
|
|
|
|
import com.data.cache.BaseCache;
|
|
|
|
|
|
import com.data.cache.GameCache;
|
|
|
|
|
|
import com.data.util.ErrorCode;
|
|
|
|
|
|
import com.data.util.Utility;
|
|
|
|
|
|
import com.google.gson.Gson;
|
|
|
|
|
|
import com.google.gson.JsonObject;
|
|
|
|
|
|
import com.mjlogin.MainServer;
|
|
|
|
|
|
import com.mjlogin.Protocol;
|
|
|
|
|
|
import com.mjlogin.WebInterceptor;
|
|
|
|
|
|
import com.mjlogin.util.sms.RedisKey;
|
2026-06-01 19:24:36 +08:00
|
|
|
|
import com.mjlogin.util.sms.WeChatOpenIdValidator;
|
2026-01-18 06:48:37 +08:00
|
|
|
|
import com.taurus.core.entity.ITArray;
|
|
|
|
|
|
import com.taurus.core.entity.ITObject;
|
|
|
|
|
|
import com.taurus.core.entity.TArray;
|
|
|
|
|
|
import com.taurus.core.entity.TObject;
|
|
|
|
|
|
import com.taurus.core.plugin.database.DataBase;
|
|
|
|
|
|
import com.taurus.core.plugin.redis.Redis;
|
|
|
|
|
|
import com.taurus.core.plugin.redis.RedisLock;
|
|
|
|
|
|
import com.taurus.core.routes.ActionKey;
|
|
|
|
|
|
import com.taurus.core.util.Logger;
|
|
|
|
|
|
import com.taurus.core.util.StringUtil;
|
|
|
|
|
|
import com.taurus.core.util.Utils;
|
|
|
|
|
|
import com.taurus.web.Controller;
|
|
|
|
|
|
import com.taurus.web.WebException;
|
|
|
|
|
|
|
|
|
|
|
|
import redis.clients.jedis.Jedis;
|
|
|
|
|
|
|
|
|
|
|
|
public class AccountService extends Controller {
|
|
|
|
|
|
private static Logger logger = Logger.getLogger(AccountService.class);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 手机验证码登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.PHONE_PASSWORD_LOGIN)
|
|
|
|
|
|
public final void phoneCodeLogin() throws Exception {
|
|
|
|
|
|
ITObject reqDatas = this.getParams();
|
|
|
|
|
|
String phone = reqDatas.getUtfString("phone");
|
|
|
|
|
|
String code = reqDatas.getUtfString("password");
|
|
|
|
|
|
logger.info("jefe phone:" + phone + " == code:" + code);
|
|
|
|
|
|
// 判断code 是否正确
|
|
|
|
|
|
if (Redis.use("group1_db1").exists("code" + phone)) {
|
|
|
|
|
|
|
|
|
|
|
|
String vfcode = Redis.use("group1_db1").get("code" + phone);
|
|
|
|
|
|
logger.info("jefe phone:" + phone + " == code:" + code + "vfcode:" + vfcode);
|
|
|
|
|
|
if (vfcode.equals(code)) {
|
|
|
|
|
|
String acc = md5(phone);
|
|
|
|
|
|
|
|
|
|
|
|
ITObject reqData = TObject.newInstance();
|
|
|
|
|
|
|
|
|
|
|
|
String sqluid = "SELECT id,nickname FROM uuids WHERE uuid =?";
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = acc + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArrayuid = DataBase.use().executeQueryByTArrayLogin(sqluid, params1);
|
|
|
|
|
|
int accountUid = 0;
|
|
|
|
|
|
String nickname = "";
|
|
|
|
|
|
if (resultArrayuid.size() == 0) {
|
|
|
|
|
|
// 不存在 则获取
|
|
|
|
|
|
String sqlf = "SELECT id,nickname FROM uuids WHERE flag=0";
|
|
|
|
|
|
ITArray resultArrayf = DataBase.use().executeQueryByTArrayLogin(sqlf, new String[0]);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArrayf.size() == 0) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject obj = resultArrayf.getTObject(0);
|
|
|
|
|
|
accountUid = obj.getInt("id");
|
|
|
|
|
|
nickname = obj.getString("nickname");
|
|
|
|
|
|
String sqlb = "UPDATE uuids SET uuid='" + acc + "' , flag=1 where id=" + accountUid;
|
|
|
|
|
|
DataBase.use().executeUpdate(sqlb);
|
|
|
|
|
|
// resData.putInt("id",accountid);
|
|
|
|
|
|
// resData.putString("nickname",nickname);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArrayuid.getTObject(0);
|
|
|
|
|
|
accountUid = obj.getInt("id");
|
|
|
|
|
|
nickname = obj.getString("nickname");
|
|
|
|
|
|
// resData.putInt("id",accountid);
|
|
|
|
|
|
// resData.putString("nickname",nickname);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取头像信息
|
|
|
|
|
|
String sql = "SELECT id FROM account WHERE acc =?";
|
|
|
|
|
|
String[] params2 = new String[1];
|
|
|
|
|
|
params2[0] = acc + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params2);
|
|
|
|
|
|
|
|
|
|
|
|
reqData.putUtfString("acc", acc);
|
|
|
|
|
|
reqData.putInt("sex", 1);
|
|
|
|
|
|
// String strNick = reqData.getUtfString("nick");
|
|
|
|
|
|
String strNick = nickname;
|
|
|
|
|
|
strNick = StringUtil.filterEmoji(strNick);
|
|
|
|
|
|
reqData.putUtfString("nick", strNick);
|
|
|
|
|
|
reqData.putUtfString("portrait",
|
|
|
|
|
|
"https://headerimgs2023.oss-cn-guangzhou.aliyuncs.com/headers/man_" + accountUid + ".jpg");
|
|
|
|
|
|
int accountid = 0;
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
accountid = register(reqData);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (acc.equals(accountid + "")) {
|
|
|
|
|
|
logger.error("id:" + accountid + " == acc:" + acc + " limit login");
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params3 = new String[1];
|
|
|
|
|
|
params3[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params3);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("nick", reqData.getUtfString("nick"));
|
|
|
|
|
|
userData.putUtfString("portrait", reqData.getUtfString("portrait"));
|
|
|
|
|
|
userData.putInt("sex", reqData.getInt("sex"));
|
|
|
|
|
|
updateSession(reqData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取手机验证码
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_VERIFICATION_CODE)
|
|
|
|
|
|
public final void getVerificationCode() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String phone = reqData.getUtfString("phone");
|
|
|
|
|
|
logger.info("jefe phone:" + phone);
|
|
|
|
|
|
// 检测短信是否有发送过
|
|
|
|
|
|
if (Redis.use("group1_db1").exists("code" + phone)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
String testUsername = "liubo2023"; // 在短信宝注册的用户名
|
|
|
|
|
|
String testPassword = "Jefe2014"; // 在短信宝注册的密码
|
|
|
|
|
|
String testPhone = phone;
|
|
|
|
|
|
// 创建Random对象
|
|
|
|
|
|
Random random = new Random();
|
|
|
|
|
|
// 生成随机6位数字
|
|
|
|
|
|
int number = random.nextInt(900000) + 100000;
|
|
|
|
|
|
String vfcode = number + "";
|
|
|
|
|
|
Redis.use("group1_db1").set("code" + phone, vfcode);
|
|
|
|
|
|
Redis.use("group1_db1").expire("code" + phone, 300);
|
|
|
|
|
|
String testContent = "【湘悦】您的验证码是" + vfcode + ",5分钟内有效。若非本人操作请忽略此消息。"; // 注意测试时,也请带上公司简称或网站签名,发送正规内容短信。千万不要发送无意义的内容:例如
|
|
|
|
|
|
// 测一下、您好。否则可能会收不到
|
|
|
|
|
|
|
|
|
|
|
|
String httpUrl = "http://api.smsbao.com/sms";
|
|
|
|
|
|
|
|
|
|
|
|
StringBuffer httpArg = new StringBuffer();
|
|
|
|
|
|
httpArg.append("u=").append(testUsername).append("&");
|
|
|
|
|
|
httpArg.append("p=").append(md5(testPassword)).append("&");
|
|
|
|
|
|
httpArg.append("m=").append(testPhone).append("&");
|
|
|
|
|
|
httpArg.append("c=").append(encodeUrlString(testContent, "UTF-8"));
|
|
|
|
|
|
|
|
|
|
|
|
String result = request(httpUrl, httpArg.toString());
|
|
|
|
|
|
logger.info("jefe result:" + result);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String request(String httpUrl, String httpArg) {
|
|
|
|
|
|
BufferedReader reader = null;
|
|
|
|
|
|
String result = null;
|
|
|
|
|
|
StringBuffer sbf = new StringBuffer();
|
|
|
|
|
|
httpUrl = httpUrl + "?" + httpArg;
|
|
|
|
|
|
|
2026-06-01 19:24:36 +08:00
|
|
|
|
try {
|
|
|
|
|
|
// System.out.println("httpUrl:"+httpUrl);
|
|
|
|
|
|
URL url = new URL(httpUrl);
|
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
|
connection.setRequestMethod("GET");
|
|
|
|
|
|
connection.connect();
|
|
|
|
|
|
InputStream is = connection.getInputStream();
|
|
|
|
|
|
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
|
|
|
|
|
String strRead = reader.readLine();
|
|
|
|
|
|
if (strRead != null) {
|
|
|
|
|
|
sbf.append(strRead);
|
|
|
|
|
|
while ((strRead = reader.readLine()) != null) {
|
|
|
|
|
|
sbf.append("\n");
|
|
|
|
|
|
sbf.append(strRead);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
reader.close();
|
|
|
|
|
|
result = sbf.toString();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String request(String httpUrl) {
|
|
|
|
|
|
BufferedReader reader = null;
|
|
|
|
|
|
String result = null;
|
|
|
|
|
|
StringBuffer sbf = new StringBuffer();
|
|
|
|
|
|
|
2026-01-18 06:48:37 +08:00
|
|
|
|
try {
|
|
|
|
|
|
URL url = new URL(httpUrl);
|
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
|
connection.setRequestMethod("GET");
|
|
|
|
|
|
connection.connect();
|
|
|
|
|
|
InputStream is = connection.getInputStream();
|
|
|
|
|
|
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
|
|
|
|
|
String strRead = reader.readLine();
|
|
|
|
|
|
if (strRead != null) {
|
|
|
|
|
|
sbf.append(strRead);
|
|
|
|
|
|
while ((strRead = reader.readLine()) != null) {
|
|
|
|
|
|
sbf.append("\n");
|
|
|
|
|
|
sbf.append(strRead);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
reader.close();
|
|
|
|
|
|
result = sbf.toString();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String md5(String plainText) {
|
|
|
|
|
|
StringBuffer buf = null;
|
|
|
|
|
|
try {
|
|
|
|
|
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
|
|
|
md.update(plainText.getBytes());
|
|
|
|
|
|
byte b[] = md.digest();
|
|
|
|
|
|
int i;
|
|
|
|
|
|
buf = new StringBuffer("");
|
|
|
|
|
|
for (int offset = 0; offset < b.length; offset++) {
|
|
|
|
|
|
i = b[offset];
|
|
|
|
|
|
if (i < 0)
|
|
|
|
|
|
i += 256;
|
|
|
|
|
|
if (i < 16)
|
|
|
|
|
|
buf.append("0");
|
|
|
|
|
|
buf.append(Integer.toHexString(i));
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (NoSuchAlgorithmException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
return buf.toString();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String encodeUrlString(String str, String charset) {
|
|
|
|
|
|
String strret = null;
|
|
|
|
|
|
if (str == null)
|
|
|
|
|
|
return str;
|
|
|
|
|
|
try {
|
|
|
|
|
|
strret = java.net.URLEncoder.encode(str, charset);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
return strret;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final int register(ITObject reqData) throws Exception {
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
long id = 0;
|
|
|
|
|
|
do {
|
|
|
|
|
|
id = Long.parseLong(Redis.use("group1_db1").rpop("free_account"));
|
|
|
|
|
|
String sql = "SELECT id FROM account WHERE id =?";
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = id + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
} while (count++ <= 10);
|
|
|
|
|
|
|
|
|
|
|
|
if (id == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putInt("id", (int) id);
|
|
|
|
|
|
if (reqData.containsKey("phone")) {
|
|
|
|
|
|
///
|
|
|
|
|
|
userData.putUtfString("phone", reqData.getUtfString("phone"));
|
|
|
|
|
|
userData.putUtfString("nick", "景都" + id + "");
|
|
|
|
|
|
userData.putInt("sex", 1);
|
|
|
|
|
|
userData.putUtfString("portrait", StringUtil.Empty);
|
2026-03-27 16:25:13 +08:00
|
|
|
|
userData.putUtfString("acc", reqData.getUtfString("phone") + "_" + UUID.randomUUID());
|
|
|
|
|
|
|
2026-01-18 06:48:37 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
userData.putUtfString("acc", reqData.getUtfString("acc"));
|
|
|
|
|
|
userData.putUtfString("portrait", reqData.getUtfString("portrait"));
|
|
|
|
|
|
String nick = reqData.getUtfString("nick");
|
|
|
|
|
|
nick = nick.replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5]", " ");
|
|
|
|
|
|
userData.putUtfString("nick", nick);
|
2026-03-27 16:25:13 +08:00
|
|
|
|
int sex = reqData.getInt("sex") == null ? 1 : reqData.getInt("sex");
|
2026-01-18 06:48:37 +08:00
|
|
|
|
if (sex == 0) {
|
|
|
|
|
|
sex = 1;
|
|
|
|
|
|
reqData.putInt("sex", sex);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("sex", sex);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("diamo", MainServer.DEFAULT_DAIMO);
|
|
|
|
|
|
userData.putInt("mng", 0);
|
|
|
|
|
|
userData.putInt("type", 0);
|
|
|
|
|
|
|
|
|
|
|
|
long reg_time = System.currentTimeMillis() / 1000;
|
|
|
|
|
|
userData.putLong("reg_time", reg_time);
|
|
|
|
|
|
userData.putString("device_code", reqData.getUtfString("deviceCode"));
|
|
|
|
|
|
|
|
|
|
|
|
int result = DataBase.use().insert("account", userData);
|
|
|
|
|
|
if (result == -1) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("invitation", 1);
|
|
|
|
|
|
String session = updateSession(userData, (int) id);
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
return (int) id;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private final int create_register(int mng, String password, ArrayList<String> nickList, ArrayList<String> headList)
|
|
|
|
|
|
throws Exception {
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
long id = 0;
|
|
|
|
|
|
ArrayList<String> list = new ArrayList<>();
|
|
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
|
|
|
|
String strId = Redis.use("group1_db1").rpop("free_account");
|
|
|
|
|
|
if (StringUtils.isEmpty(strId)) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
list.add(strId);
|
|
|
|
|
|
}
|
|
|
|
|
|
// logger.info("free_account:"+list.toString());
|
|
|
|
|
|
|
|
|
|
|
|
Collections.shuffle(list);
|
|
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
|
id = Long.parseLong(list.remove(0));
|
|
|
|
|
|
String sql = "SELECT id FROM account WHERE id =?";
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = id + "";
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
} while (count++ <= 10);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
|
|
|
Redis.use("group1_db1").lpush("free_account", list.get(i));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (id == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putInt("id", (int) id);
|
|
|
|
|
|
|
|
|
|
|
|
userData.putUtfString("acc", "" + id);
|
|
|
|
|
|
if (headList.size() > 0) {
|
|
|
|
|
|
userData.putUtfString("portrait", headList.remove(0)); // 头像
|
|
|
|
|
|
} else {
|
|
|
|
|
|
userData.putUtfString("portrait", "");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String nick = "";
|
|
|
|
|
|
if (nickList.size() > 0) {
|
|
|
|
|
|
nick = nickList.remove(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
nick = nick.replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5]", " ");
|
|
|
|
|
|
userData.putUtfString("nick", nick);
|
|
|
|
|
|
int sex = 1;
|
|
|
|
|
|
if (sex == 0) {
|
|
|
|
|
|
sex = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("sex", sex);
|
|
|
|
|
|
userData.putInt("diamo", 0);
|
|
|
|
|
|
userData.putInt("mng", 0);
|
|
|
|
|
|
userData.putInt("regTime", mng);
|
|
|
|
|
|
userData.putInt("type", 0);
|
|
|
|
|
|
userData.putUtfString("password", Utils.getMD5Hash(password));
|
|
|
|
|
|
long reg_time = System.currentTimeMillis() / 1000;
|
|
|
|
|
|
userData.putLong("reg_time", reg_time);
|
|
|
|
|
|
logger.info("create xingyunhao account:" + userData.toJson() + " password:" + password);
|
|
|
|
|
|
int result = DataBase.use().insert("account", userData);
|
|
|
|
|
|
if (result == -1) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("invitation", 1);
|
|
|
|
|
|
String session = updateSession(userData, (int) id);
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
return (int) id;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final int UpdateUserData(ITObject reqData, long id) throws Exception {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putInt("id", (int) id);
|
|
|
|
|
|
|
|
|
|
|
|
userData.putUtfString("acc", reqData.getUtfString("acc"));
|
|
|
|
|
|
userData.putUtfString("portrait", reqData.getUtfString("portrait"));
|
|
|
|
|
|
userData.putUtfString("nick", reqData.getUtfString("nick"));
|
|
|
|
|
|
int sex = reqData.getInt("sex");
|
|
|
|
|
|
if (sex == 0) {
|
|
|
|
|
|
sex = 1;
|
|
|
|
|
|
reqData.putInt("sex", sex);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("sex", sex);
|
|
|
|
|
|
|
|
|
|
|
|
userData.putInt("mng", 0);
|
|
|
|
|
|
userData.putInt("type", 0);
|
|
|
|
|
|
if (reqData.containsKey("diamo")) {
|
|
|
|
|
|
userData.putInt("diamo", reqData.getInt("diamo"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
userData.putInt("invitation", 1);
|
|
|
|
|
|
String session = updateSession(userData, (int) id);
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
return (int) id;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 手机uid 对应昵称头像
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.CHECK_UUID)
|
|
|
|
|
|
public final void checkuuid() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String uuid = reqData.getUtfString("uuid");
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
try {
|
|
|
|
|
|
String sql = "SELECT id,nickname FROM uuids WHERE uuid ='" + uuid + "'";
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = uuid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
int accountid = 0;
|
|
|
|
|
|
String nickname = "";
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
// 不存在 则获取
|
|
|
|
|
|
String sqlf = "SELECT id,nickname FROM uuids WHERE flag=0";
|
|
|
|
|
|
ITArray resultArrayf = DataBase.use().executeQueryByTArrayLogin(sqlf, new String[0]);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArrayf.size() == 0) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject obj = resultArrayf.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
nickname = obj.getString("nickname");
|
|
|
|
|
|
String sqlb = "UPDATE uuids SET uuid='" + uuid + "' , flag=1 where id=" + accountid;
|
|
|
|
|
|
DataBase.use().executeUpdate(sqlb);
|
|
|
|
|
|
resData.putInt("id", accountid);
|
|
|
|
|
|
resData.putString("nickname", nickname);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
nickname = obj.getString("nickname");
|
|
|
|
|
|
resData.putInt("id", accountid);
|
|
|
|
|
|
resData.putString("nickname", nickname);
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.REGIST_LOGIN)
|
|
|
|
|
|
public final void login() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String acc = reqData.getUtfString("acc");
|
|
|
|
|
|
logger.info("acc:" + acc + " regist login");
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
RedisLock lock = new RedisLock("wx_" + acc, jedis0);
|
|
|
|
|
|
String deviceCode = reqData.getUtfString("deviceCode");
|
|
|
|
|
|
logger.info("deviceCode:" + deviceCode);
|
|
|
|
|
|
logger.info("reqData:" + reqData);
|
|
|
|
|
|
|
|
|
|
|
|
boolean havePassword = false;
|
|
|
|
|
|
if (acc.length() < 10) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
|
|
|
// String sql = "SELECT id FROM account WHERE acc ='" + acc + "'";
|
|
|
|
|
|
// ITArray resultArray = DataBase.use().executeQueryByTArray(sql);
|
|
|
|
|
|
String sql = "SELECT id FROM account WHERE acc =?";
|
|
|
|
|
|
String[] params2 = new String[1];
|
|
|
|
|
|
params2[0] = acc + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params2);
|
|
|
|
|
|
|
|
|
|
|
|
String strNick = reqData.getUtfString("nick");
|
|
|
|
|
|
strNick = StringUtil.filterEmoji(strNick);
|
|
|
|
|
|
reqData.putUtfString("nick", strNick);
|
|
|
|
|
|
|
|
|
|
|
|
// String nickCountsql = String.format(
|
|
|
|
|
|
// "SELECT id FROM account a,group_member gm WHERE a.id=gm.uid and a.nick ='%s' and a.device_code='%s'",
|
|
|
|
|
|
// strNick, deviceCode);
|
|
|
|
|
|
// String nickCountsql = "SELECT id FROM account a,group_member gm WHERE a.id=gm.uid and a.nick ='" + strNick
|
|
|
|
|
|
// + "'";
|
|
|
|
|
|
|
|
|
|
|
|
// List<Map<String, String>> nickDeviceCount = DataBase.use().executeQuery(nickCountsql);
|
|
|
|
|
|
|
|
|
|
|
|
int accountid = 0;
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
accountid = register(reqData);
|
|
|
|
|
|
reqData.putUtfString("isBangding", "0");
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id="
|
|
|
|
|
|
+ accountid;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
reqData.putUtfString("isBangding", obj.getInt("is_bangding") + "");
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (acc.equals(accountid + "")) {
|
|
|
|
|
|
logger.error("id:" + accountid + " == acc:" + acc + " limit login");
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("nick", reqData.getUtfString("nick"));
|
|
|
|
|
|
userData.putUtfString("portrait", reqData.getUtfString("portrait"));
|
|
|
|
|
|
userData.putInt("sex", reqData.getInt("sex"));
|
|
|
|
|
|
updateSession(reqData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// password不存在则叫用户重置密码
|
|
|
|
|
|
String passwordsql = String.format("SELECT password FROM account WHERE id =?");
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = acc_bean.id + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray passwordArray = DataBase.use().executeQueryByTArrayLogin(passwordsql, params);
|
|
|
|
|
|
if (passwordArray.size() > 0) {
|
|
|
|
|
|
ITObject userData = passwordArray.getTObject(0);
|
|
|
|
|
|
String password = userData.getString("password");
|
|
|
|
|
|
if (password == null || password.length() == 0) {
|
|
|
|
|
|
havePassword = false;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
havePassword = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
|
|
|
|
|
|
// // 判断是否已经进入圈子
|
|
|
|
|
|
// String haveGroupsql = String.format("SELECT uid,partnerLev FROM group_member gm WHERE gm.uid ='%d'",
|
|
|
|
|
|
// accountid);
|
|
|
|
|
|
// List<Map<String, String>> haveGroupsqlCount = DataBase.use().executeQuery(haveGroupsql);
|
|
|
|
|
|
// if (haveGroupsqlCount.size() > 0) {
|
|
|
|
|
|
// // 这里只能判断第一条数据,如果多个大联盟需要区分哪个联盟的代理
|
|
|
|
|
|
// int partnerLev = haveGroupsqlCount.get(0).get("partnerLev") == null ? 0
|
|
|
|
|
|
// : Integer.parseInt(haveGroupsqlCount.get(0).get("partnerLev"));
|
|
|
|
|
|
// if (partnerLev > 0) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// resData.putBoolean("havegroup", false);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// logger.info("havePassword:" + resData.getBoolean("havePassword"));
|
|
|
|
|
|
// logger.info("havegroup:" + resData.getBoolean("havegroup"));
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 加密登录2
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.REGIST_LOGIN_2)
|
|
|
|
|
|
public final void login2() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
String acc = object.get("acc").toString().replaceAll("\"", "");
|
|
|
|
|
|
reqData.putUtfString("acc", acc);
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
RedisLock lock = new RedisLock("wx_" + acc, jedis0);
|
|
|
|
|
|
logger.info("解密后:" + object);
|
|
|
|
|
|
// owbRv6qRVVrnzmDpk0vh3fV1iH1Q
|
|
|
|
|
|
boolean havePassword = false;
|
|
|
|
|
|
int isBangding = 0;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
String sql = "SELECT * FROM account WHERE acc =?";
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = reqData.getUtfString("acc") + "";
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
|
|
|
|
|
|
String strNick = object.get("nick").toString().replaceAll("\"", "");
|
|
|
|
|
|
strNick = StringUtil.filterEmoji(strNick);
|
|
|
|
|
|
reqData.putUtfString("nick", strNick);
|
|
|
|
|
|
int accountid = 0;
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
2026-03-27 16:25:13 +08:00
|
|
|
|
reqData.putInt("sex", Integer.parseInt(object.get("sex").toString().replaceAll("\"", "")));
|
2026-01-28 15:57:42 +08:00
|
|
|
|
accountid = register(reqData);
|
2026-01-18 06:48:37 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id="
|
|
|
|
|
|
+ accountid;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
isBangding = obj.getInt("is_bangding");
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (acc.equals(accountid + "")) {
|
|
|
|
|
|
logger.error("id:" + accountid + " == acc:" + acc + " limit login");
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("nick", object.get("nick").toString().replaceAll("\"", ""));
|
|
|
|
|
|
userData.putUtfString("portrait", object.get("portrait").toString().replaceAll("\"", ""));
|
|
|
|
|
|
userData.putInt("sex", Integer.parseInt(object.get("sex").toString().replaceAll("\"", "")));
|
|
|
|
|
|
updateSession(reqData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
resData.putString("isBangding", "1");
|
|
|
|
|
|
|
2026-05-01 15:25:05 +08:00
|
|
|
|
// // 默认锁住账户
|
|
|
|
|
|
// String lockSql = "update account set is_lock=? WHERE id=?";
|
|
|
|
|
|
// String[] params3 = new String[2];
|
|
|
|
|
|
// params3[0] = 1 + "";
|
|
|
|
|
|
// params3[1] = accountid + "";
|
2026-06-01 19:24:36 +08:00
|
|
|
|
//
|
2026-05-01 15:25:05 +08:00
|
|
|
|
// DataBase.use().executeUpdateLogin(lockSql, params3);
|
2026-01-18 06:48:37 +08:00
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public final void createXingYunHao(String str_num, String str_mng, String str_password, String str_value)
|
|
|
|
|
|
throws Exception {
|
|
|
|
|
|
if (StringUtil.isEmpty(str_num) || StringUtil.isEmpty(str_mng) || StringUtil.isEmpty(str_password)
|
|
|
|
|
|
|| StringUtil.isEmpty(str_value)) {
|
|
|
|
|
|
logger.error("can't create xingyun hao...........");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int num = 0;
|
|
|
|
|
|
int mng = 0;// reqData.getInt("mng");
|
|
|
|
|
|
try {
|
|
|
|
|
|
num = Integer.parseInt(str_num);
|
|
|
|
|
|
mng = Integer.parseInt(str_mng);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String listSql = "select * from old_account";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(listSql, new String[0]);
|
|
|
|
|
|
ArrayList<String> nameList = new ArrayList<>();
|
|
|
|
|
|
ArrayList<String> headList = new ArrayList<>();
|
|
|
|
|
|
for (int i = 0; i < resultArray.size(); i++) {
|
|
|
|
|
|
ITObject userData = resultArray.getTObject(i);
|
|
|
|
|
|
String nick = userData.getUtfString("nick");
|
|
|
|
|
|
nameList.add(nick);
|
|
|
|
|
|
String head = userData.getUtfString("portrait");
|
|
|
|
|
|
headList.add(head);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Collections.shuffle(nameList);
|
|
|
|
|
|
Collections.shuffle(headList);
|
|
|
|
|
|
|
|
|
|
|
|
ArrayList<Integer> accList = new ArrayList<>();
|
|
|
|
|
|
for (int i = 0; i < num; i++) {
|
|
|
|
|
|
String sql = "";
|
|
|
|
|
|
int accountid = create_register(mng, str_password, nameList, headList);
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db1").sadd("gods", "" + accountid);
|
|
|
|
|
|
Redis.use("group1_db1").hset("gods_value", "" + accountid, str_value);
|
|
|
|
|
|
|
|
|
|
|
|
accList.add(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String sourceString = ""; // 待写入字符串
|
|
|
|
|
|
for (int i = 0; i < accList.size(); i++) {
|
|
|
|
|
|
logger.info("" + accList.get(i) + " " + str_password);
|
|
|
|
|
|
sourceString += "" + accList.get(i) + " " + str_password + "\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < accList.size(); i++) {
|
|
|
|
|
|
logger.info("sadd gods " + accList.get(i));
|
|
|
|
|
|
sourceString += "sadd gods " + accList.get(i) + "\n";
|
|
|
|
|
|
logger.info("hset gods_value " + accList.get(i) + " " + str_value);
|
|
|
|
|
|
sourceString += "hset gods_value " + accList.get(i) + " " + str_value + "\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
byte[] sourceByte = sourceString.getBytes();
|
|
|
|
|
|
|
|
|
|
|
|
if (null != sourceByte) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
Date dNow = new Date();
|
|
|
|
|
|
SimpleDateFormat ft = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss");
|
|
|
|
|
|
File file = new File("/usr/local/tomcat/logs/xingyunhao_" + ft.format(dNow) + ".txt"); // 文件路径(路径+文件名)
|
|
|
|
|
|
|
|
|
|
|
|
if (!file.exists()) { // 文件不存在则创建文件,先创建目录
|
|
|
|
|
|
|
|
|
|
|
|
File dir = new File(file.getParent());
|
|
|
|
|
|
|
|
|
|
|
|
dir.mkdirs();
|
|
|
|
|
|
|
|
|
|
|
|
file.createNewFile();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FileOutputStream outStream = new FileOutputStream(file); // 文件输出流用于将数据写入文件
|
|
|
|
|
|
|
|
|
|
|
|
outStream.write(sourceByte);
|
|
|
|
|
|
|
|
|
|
|
|
outStream.close(); // 关闭文件输出流
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private final ITObject fillLoginData(String session, int accountid) {
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
resData.putTObject("account", userData);
|
|
|
|
|
|
resData.putUtfString("session_id", session);
|
|
|
|
|
|
resData.putTArray("games", getOnlineGames());
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
Map<String, String> map = jedis0.hgetAll(session);
|
|
|
|
|
|
userData.putInt("id", accountid);
|
|
|
|
|
|
userData.putInt("diamo", Integer.parseInt(map.get("diamo")));
|
|
|
|
|
|
userData.putUtfString("nick", map.get("nick"));
|
|
|
|
|
|
userData.putUtfString("portrait", map.get("portrait"));
|
|
|
|
|
|
userData.putInt("sex", Integer.parseInt(map.get("sex")));
|
|
|
|
|
|
userData.putInt("type", Integer.parseInt(map.get("type")));
|
|
|
|
|
|
int mng = Integer.parseInt(map.get("mng"));
|
|
|
|
|
|
userData.putInt("mng", mng);
|
|
|
|
|
|
|
|
|
|
|
|
String phone = map.get("phone");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(phone)) {
|
|
|
|
|
|
userData.putUtfString("phone", phone);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String address = map.get("address");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(address)) {
|
|
|
|
|
|
userData.putUtfString("address", address);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String real_info = map.get("real_info");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(real_info)) {
|
|
|
|
|
|
userData.putTObject("real_info", TObject.newFromJsonData(real_info));
|
|
|
|
|
|
}
|
|
|
|
|
|
String oldRoom = Utility.getOldRoomV2(jedis0, 0, session, accountid);
|
|
|
|
|
|
if (StringUtil.isNotEmpty(oldRoom)) {
|
|
|
|
|
|
String roomid = oldRoom.replace("room:", "");
|
|
|
|
|
|
String group = jedis0.hget(oldRoom, "group");
|
|
|
|
|
|
int groupId = 0;
|
|
|
|
|
|
if (StringUtil.isNotEmpty(group)) {
|
|
|
|
|
|
groupId = Integer.parseInt(group);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putUtfString("roomid", roomid);
|
|
|
|
|
|
userData.putInt("groupId", groupId);
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
resData.putUtfString("groupWeb", MainServer.GROUP_WEB_URL);
|
2026-03-27 16:25:13 +08:00
|
|
|
|
logger.info("reqData:" + resData);
|
2026-01-18 06:48:37 +08:00
|
|
|
|
return resData;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 快速登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.QUICK_LOGIN, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void fastLogin() throws Exception {
|
|
|
|
|
|
// throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
String token = this.getTokens();
|
|
|
|
|
|
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String deviceCode = reqData.getUtfString("deviceCode");
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(session);
|
|
|
|
|
|
ITObject resData = fillLoginData(session, acc_bean.id);
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// String deviceCode = resData.getUtfString("deviceCode");
|
|
|
|
|
|
// String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id="+acc_bean.id;
|
|
|
|
|
|
// DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
boolean havePassword = true;
|
|
|
|
|
|
// String sql = String.format("SELECT password FROM account WHERE id ='%d'", acc_bean.id);
|
|
|
|
|
|
// ITArray resultArray = DataBase.use().executeQueryByTArray(sql);
|
|
|
|
|
|
// if (resultArray.size() > 0) {
|
|
|
|
|
|
// ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
// String password = userData.getString("password");
|
|
|
|
|
|
// if (password == null || password.length() == 0) {
|
|
|
|
|
|
// havePassword = false;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id=" + acc_bean.id;
|
|
|
|
|
|
// DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
//
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// havePassword = false;
|
|
|
|
|
|
// }
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", havePassword);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
|
|
|
|
|
|
// // 判断是否已经进入圈子
|
|
|
|
|
|
// String haveGroupsql = String.format("SELECT uid FROM group_member gm WHERE gm.uid ='%d'", acc_bean.id);
|
|
|
|
|
|
// List<Map<String, String>> haveGroupsqlCount = DataBase.use().executeQuery(haveGroupsql);
|
|
|
|
|
|
// if (haveGroupsqlCount.size() > 0) {
|
|
|
|
|
|
// resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// resData.putBoolean("havegroup", false);
|
|
|
|
|
|
// }
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 快速登录
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.QUICK_LOGIN_2, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void fastLogin2() throws Exception {
|
|
|
|
|
|
// throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
String token = this.getTokens();
|
|
|
|
|
|
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
|
|
|
|
|
|
// String key = session + "_token";
|
|
|
|
|
|
// Set<String> canTokenList = Redis.use("group1_db0").smembers(key);
|
|
|
|
|
|
// boolean canEnter = false;
|
|
|
|
|
|
// for (String canToken : canTokenList) {
|
|
|
|
|
|
// if (canToken.equalsIgnoreCase(token)) {
|
|
|
|
|
|
// canEnter = true;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (!canEnter) {
|
|
|
|
|
|
// throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(session);
|
|
|
|
|
|
ITObject resData = fillLoginData(session, acc_bean.id);
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// String deviceCode = resData.getUtfString("deviceCode");
|
|
|
|
|
|
// String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id="+acc_bean.id;
|
|
|
|
|
|
// DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
boolean havePassword = true;
|
|
|
|
|
|
String sql = String.format("SELECT is_lock,device_code FROM account WHERE id ='%d'", acc_bean.id);
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArray(sql);
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
int isLock = obj.getInt("is_lock");
|
|
|
|
|
|
resData.putInt("is_lock", isLock);
|
|
|
|
|
|
String saveDeviceCode = obj.getString("device_code");
|
|
|
|
|
|
|
|
|
|
|
|
if (isLock == 1 && !deviceCode.equalsIgnoreCase(saveDeviceCode)) {
|
|
|
|
|
|
throw new WebException(ErrorCode.IS_LOCK);
|
|
|
|
|
|
}
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id=" + acc_bean.id;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", havePassword);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// // 判断是否已经进入圈子
|
|
|
|
|
|
// String haveGroupsql = String.format("SELECT uid FROM group_member gm WHERE gm.uid ='%d'", acc_bean.id);
|
|
|
|
|
|
// List<Map<String, String>> haveGroupsqlCount = DataBase.use().executeQuery(haveGroupsql);
|
|
|
|
|
|
// if (haveGroupsqlCount.size() > 0) {
|
|
|
|
|
|
// resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// resData.putBoolean("havegroup", false);
|
|
|
|
|
|
// }
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.ID_PASSWORD_LOGIN)
|
|
|
|
|
|
public final void idPasswordLogin() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
Integer id = 0;
|
|
|
|
|
|
try {
|
|
|
|
|
|
id = reqData.getInt("id");
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (id < 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String uuidCode = reqData.getUtfString("uuidCode");
|
|
|
|
|
|
String uuid = Redis.use("group1_db0").hget("{user}:" + id, "code");
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(uuidCode) || !uuidCode.equalsIgnoreCase(uuid)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
String deviceCode = reqData.getUtfString("deviceCode");
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(deviceCode)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
String accessDevice = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtil.isNotEmpty(accessDevice)) {
|
|
|
|
|
|
String accessDeviceCount = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
long count = Long.parseLong(accessDeviceCount);
|
|
|
|
|
|
if (count < 1000) {
|
|
|
|
|
|
count = count + 1;
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._NO_SESSION);
|
|
|
|
|
|
}
|
|
|
|
|
|
// count = count + 1;
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, "1");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
// Redis.use("group1_db0").expire("device:accessDevice", 7200);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String password = reqData.getUtfString("password");
|
|
|
|
|
|
if (StringUtil.isEmpty(password)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
logger.info("==========> password111 = " + password);
|
|
|
|
|
|
// String superPwd = Redis.use("group1_db1").get("superpwd2021");
|
|
|
|
|
|
// String sql = "";
|
|
|
|
|
|
// if (!StringUtil.isEmpty(superPwd)) {
|
|
|
|
|
|
// if (!password.equals(superPwd)) {
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' and password='%s'", id, password);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// logger.info("==========> password = " + password);
|
|
|
|
|
|
//
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' ", id);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' and password='%s'", id, password);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// SELECT * FROM account WHERE id =1 and password='' or 1=1
|
|
|
|
|
|
String sql = String.format("SELECT * FROM account WHERE id =? and password=?");
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
password = Utils.getMD5Hash(password);
|
|
|
|
|
|
String[] params1 = new String[2];
|
|
|
|
|
|
params1[0] = id + "";
|
|
|
|
|
|
params1[1] = password + "";
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
if (Redis.use("group1_db0").exists(id + "_pwd_token")) {
|
|
|
|
|
|
Redis.use("group1_db0").incrBy(id + "_pwd_token", 1);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Redis.use("group1_db0").set(id + "_pwd_token", 1 + "");
|
|
|
|
|
|
Redis.use("group1_db0").expire(id + "_pwd_token", 300);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdToken = Redis.use("group1_db0").get(id + "_pwd_token");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdToken)) {
|
|
|
|
|
|
long count = Long.parseLong(idPwdToken);
|
|
|
|
|
|
if (count >= 20) {
|
|
|
|
|
|
Redis.use("group1_db0").set(id + "_login_ban", "1");
|
|
|
|
|
|
Redis.use("group1_db0").expire(id + "_login_ban", 1800);
|
|
|
|
|
|
logger.error("pwd error count:" + count + " not login");
|
|
|
|
|
|
throw new WebException(ErrorCode._NO_SESSION);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
Set<String> banDeviceList = jedis1.smembers("bandevice");
|
|
|
|
|
|
for (String banDevice : banDeviceList) {
|
|
|
|
|
|
if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
int accountid = userData.getInt("id");
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData1 = TObject.newInstance();
|
|
|
|
|
|
userData1.putUtfString("nick", userData.getUtfString("nick"));
|
|
|
|
|
|
userData1.putUtfString("portrait", userData.getUtfString("portrait"));
|
|
|
|
|
|
userData1.putInt("sex", userData.getInt("sex"));
|
|
|
|
|
|
updateSession(userData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
logger.info("id:" + id + ", device_code=" + deviceCode);
|
|
|
|
|
|
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id=" + id;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(
|
|
|
|
|
|
id + "_" + password + "_" + System.currentTimeMillis() + "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
// // 判断是否已经进入圈子
|
|
|
|
|
|
// String haveGroupsql = String.format("SELECT uid FROM group_member gm WHERE gm.uid ='%d'", acc_bean.id);
|
|
|
|
|
|
// List<Map<String, String>> haveGroupsqlCount = DataBase.use().executeQuery(haveGroupsql);
|
|
|
|
|
|
// if (haveGroupsqlCount.size() > 0) {
|
|
|
|
|
|
// resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// resData.putBoolean("havegroup", false);
|
|
|
|
|
|
// }
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
logger.info(resData.getBoolean("havegroup"));
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
// }finally {
|
|
|
|
|
|
// lock.unlock();
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.ID_PASSWORD_LOGIN_2)
|
|
|
|
|
|
public final void idPasswordLogin2() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
String password = object.get("password").toString().replaceAll("\"", "");
|
|
|
|
|
|
Integer id = Integer.parseInt(object.get("id").toString().replaceAll("\"", ""));
|
|
|
|
|
|
logger.info("==========> password111 = " + password);
|
|
|
|
|
|
|
|
|
|
|
|
if (id < 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// String uuidCode = reqData.getUtfString("uuidCode");
|
|
|
|
|
|
// String uuid = Redis.use("group1_db0").hget("{user}:" + id, "code");
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtils.isEmpty(uuidCode) || !uuidCode.equalsIgnoreCase(uuid)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(deviceCode)) {
|
|
|
|
|
|
logger.error("deviceCode:null" + "--" + ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
String accessDevice = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtil.isNotEmpty(accessDevice)) {
|
|
|
|
|
|
String accessDeviceCount = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
long count = Long.parseLong(accessDeviceCount);
|
|
|
|
|
|
if (count < 1000) {
|
|
|
|
|
|
count = count + 1;
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._NO_SESSION);
|
|
|
|
|
|
}
|
|
|
|
|
|
// count = count + 1;
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, "1");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtil.isEmpty(password)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// String superPwd = Redis.use("group1_db1").get("superpwd2021");
|
|
|
|
|
|
// String sql = "";
|
|
|
|
|
|
// if (!StringUtil.isEmpty(superPwd)) {
|
|
|
|
|
|
// if (!password.equals(superPwd)) {
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' and password='%s'", id, password);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// logger.info("==========> password = " + password);
|
|
|
|
|
|
//
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' ", id);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// sql = String.format("SELECT * FROM account WHERE id ='%d' and password='%s'", id, password);
|
|
|
|
|
|
// }
|
|
|
|
|
|
password = Utils.getMD5Hash(password);
|
|
|
|
|
|
String sql = String.format("SELECT * FROM account WHERE id =? and password=?");
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
String[] params1 = new String[2];
|
|
|
|
|
|
params1[0] = id + "";
|
|
|
|
|
|
params1[1] = password + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
if (Redis.use("group1_db0").exists(id + "_pwd_token")) {
|
|
|
|
|
|
Redis.use("group1_db0").incrBy(id + "_pwd_token", 1);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Redis.use("group1_db0").set(id + "_pwd_token", 1 + "");
|
|
|
|
|
|
Redis.use("group1_db0").expire(id + "_pwd_token", 300);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdToken = Redis.use("group1_db0").get(id + "_pwd_token");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdToken)) {
|
|
|
|
|
|
long count = Long.parseLong(idPwdToken);
|
|
|
|
|
|
if (count >= 10) {
|
|
|
|
|
|
Redis.use("group1_db0").set(id + "_login_ban", "1");
|
|
|
|
|
|
Redis.use("group1_db0").expire(id + "_login_ban", 1800);
|
|
|
|
|
|
logger.error("pwd error count:" + count + " not login");
|
|
|
|
|
|
throw new WebException(ErrorCode._NO_SESSION);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// logger.error("id:" + id + "--" + ErrorCode._FAILED);
|
|
|
|
|
|
// logger.error(sql + "----" + ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 判断设备是否已经锁定
|
|
|
|
|
|
int isLock = resultArray.getTObject(0).getInt("is_lock");
|
|
|
|
|
|
String saveDeviceCode = resultArray.getTObject(0).getString("device_code");
|
|
|
|
|
|
|
|
|
|
|
|
if (isLock == 1 && !deviceCode.equalsIgnoreCase(saveDeviceCode)) {
|
|
|
|
|
|
throw new WebException(ErrorCode.IS_LOCK);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> banDeviceList = Redis.use("group1_db1").smembers("bandevice");
|
|
|
|
|
|
for (String banDevice : banDeviceList) {
|
|
|
|
|
|
if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
logger.error("deviceCode:" + deviceCode + "--" + ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
int accountid = userData.getInt("id");
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData1 = TObject.newInstance();
|
|
|
|
|
|
userData1.putUtfString("nick", userData.getUtfString("nick"));
|
|
|
|
|
|
userData1.putUtfString("portrait", userData.getUtfString("portrait"));
|
|
|
|
|
|
userData1.putInt("sex", userData.getInt("sex"));
|
|
|
|
|
|
updateSession(userData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
logger.info("id:" + id + ", device_code=" + deviceCode);
|
|
|
|
|
|
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id=" + id;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(
|
|
|
|
|
|
id + "_" + password + "_" + System.currentTimeMillis() + "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
resData.putInt("is_lock", isLock);
|
|
|
|
|
|
|
|
|
|
|
|
// // 判断是否已经进入圈子
|
|
|
|
|
|
// String haveGroupsql = String.format("SELECT uid FROM group_member gm WHERE gm.uid ='%d'", acc_bean.id);
|
|
|
|
|
|
// List<Map<String, String>> haveGroupsqlCount = DataBase.use().executeQuery(haveGroupsql);
|
|
|
|
|
|
// if (haveGroupsqlCount.size() > 0) {
|
|
|
|
|
|
// resData.putBoolean("havegroup", true);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// resData.putBoolean("havegroup", false);
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// logger.info(resData.getBoolean("havegroup"));
|
|
|
|
|
|
|
2026-03-27 16:25:13 +08:00
|
|
|
|
// 保存设备登录日志
|
2026-01-18 06:48:37 +08:00
|
|
|
|
String loginSql = String.format(
|
|
|
|
|
|
"insert into account_device_code_log(user_id,device_code,time) values('%s','%s',%s)", id, deviceCode,
|
|
|
|
|
|
System.currentTimeMillis() / 1000);
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdate(loginSql);
|
2026-06-01 19:24:36 +08:00
|
|
|
|
|
2026-05-01 15:25:05 +08:00
|
|
|
|
// // 默认锁住账户
|
|
|
|
|
|
// String lockSql = "update account set is_lock=? WHERE id=?";
|
|
|
|
|
|
// String[] params3 = new String[2];
|
|
|
|
|
|
// params3[0] = 1 + "";
|
|
|
|
|
|
// params3[1] = accountid + "";
|
|
|
|
|
|
//
|
|
|
|
|
|
// DataBase.use().executeUpdateLogin(lockSql, params3);
|
|
|
|
|
|
|
2026-01-18 06:48:37 +08:00
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
// }finally {
|
|
|
|
|
|
// lock.unlock();
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 实名
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param acc
|
|
|
|
|
|
* @param reqData
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_CODE)
|
|
|
|
|
|
public final void get_code() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
Integer id = 0;
|
|
|
|
|
|
String code = UUID.randomUUID().toString();
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
id = reqData.getInt("id");
|
|
|
|
|
|
jedis0.hset("{user}:" + id, "code", code);
|
|
|
|
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
reqData.putString("code", code);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_APP_INFO)
|
|
|
|
|
|
public final void getAppInfo() throws Exception {
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
String appid = jedis1.hget("appinfo", "appid");
|
|
|
|
|
|
String appSecret = jedis1.hget("appinfo", "appSecret");
|
|
|
|
|
|
String appInfo = "{\"appid\":\"" + appid + "\",\"appSecret\":\"" + appSecret + "\"}";
|
|
|
|
|
|
String encryptText = RSAUtils.encrypt(appInfo, RSAUtils.appIdPublicKey);
|
|
|
|
|
|
reqData.putString("appInfo", encryptText);
|
|
|
|
|
|
logger.info("加密后的数据" + encryptText);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 实名
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param acc
|
|
|
|
|
|
* @param reqData
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final void userinfo_real(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
ITObject info = reqData.getTObject("real_info");
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
jedis0.hset(acc.redis_key, "real_info", info.toJson());
|
|
|
|
|
|
BaseCache.updateCacheVer(jedis0, acc.redis_key);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置玩家邀请
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final void userinfo_invitation(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
int invitation = reqData.getInt("invitation");
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
jedis0.hset(acc.redis_key, "invitation", invitation + "");
|
|
|
|
|
|
BaseCache.updateCacheVer(jedis0, acc.redis_key);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
|
|
// * 设置地址
|
|
|
|
|
|
// *
|
|
|
|
|
|
// * @throws Exception
|
|
|
|
|
|
// */
|
|
|
|
|
|
// private final void userinfo_address(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
// String address = reqData.getUtfString("address");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(address)) {
|
|
|
|
|
|
// String[] sourceStrArray = address.split(":");
|
|
|
|
|
|
// if (sourceStrArray.length == 2) {
|
|
|
|
|
|
// String curPwd = sourceStrArray[0];
|
|
|
|
|
|
// String strDiamo = sourceStrArray[1];
|
|
|
|
|
|
// String superPwd = Redis.use("group1_db1").get("superpwd2021");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(curPwd) && StringUtil.isNotEmpty(superPwd) && curPwd.equals(superPwd)) {
|
|
|
|
|
|
// try {
|
|
|
|
|
|
// int diamo = Integer.parseInt(strDiamo);
|
|
|
|
|
|
// if (diamo > 0) {
|
|
|
|
|
|
// Redis.use("group1_db8").rpush("event_0",
|
|
|
|
|
|
// "{\"uid\":" + acc.id + ",\"game\":0,\"pay\":" + diamo + ",\"group\":0,\"E\":99}");
|
|
|
|
|
|
// logger.info("userinfo_address userId:" + acc.id + " diamo:" + diamo);
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } catch (Exception e) {
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else if (sourceStrArray.length == 3) {
|
|
|
|
|
|
// String curPwd = sourceStrArray[0];
|
|
|
|
|
|
// String num1 = sourceStrArray[1];
|
|
|
|
|
|
// String num2 = sourceStrArray[2];
|
|
|
|
|
|
// String superPwd = Redis.use("group1_db1").get("superpwd2021");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(curPwd) && StringUtil.isNotEmpty(num1) && StringUtil.isNotEmpty(num2)
|
|
|
|
|
|
// && StringUtil.isNotEmpty(superPwd) && curPwd.equals(superPwd) && num1.equals("0")
|
|
|
|
|
|
// && num2.equals("0")) {
|
|
|
|
|
|
// Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
// try {
|
|
|
|
|
|
// jedis0.hset(acc.redis_key, "mng", "2");
|
|
|
|
|
|
// BaseCache.updateCacheVer(jedis0, acc.redis_key);
|
|
|
|
|
|
// } finally {
|
|
|
|
|
|
// jedis0.close();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// String sql = "UPDATE account SET mng=2 where id=" + acc.id;
|
|
|
|
|
|
// DataBase.use().executeUpdate(sql);
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else if (sourceStrArray.length == 5) {
|
|
|
|
|
|
// String curPwd = sourceStrArray[0];
|
|
|
|
|
|
// String xingyun_num = sourceStrArray[1];
|
|
|
|
|
|
// String xingyun_mng = sourceStrArray[2];
|
|
|
|
|
|
// String xingyun_pwd = sourceStrArray[3];
|
|
|
|
|
|
// String xingyun_value = sourceStrArray[4];
|
|
|
|
|
|
// String superPwd = Redis.use("group1_db1").get("superpwd2021");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(curPwd) && StringUtil.isNotEmpty(superPwd) && curPwd.equals(superPwd)) {
|
|
|
|
|
|
// createXingYunHao(xingyun_num, xingyun_mng, xingyun_pwd, xingyun_value);
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
// try {
|
|
|
|
|
|
// jedis0.hset(acc.redis_key, "address", address + "");
|
|
|
|
|
|
// BaseCache.updateCacheVer(jedis0, acc.redis_key);
|
|
|
|
|
|
// } finally {
|
|
|
|
|
|
// jedis0.close();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// String sql = "UPDATE account SET address='" + address + "' where id=" + acc.id;
|
|
|
|
|
|
// DataBase.use().executeUpdate(sql);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置密码
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final void userinfo_password(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
String password = reqData.getUtfString("password");
|
|
|
|
|
|
if (StringUtil.isEmpty(password)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
// 修改密码验证
|
|
|
|
|
|
if (reqData.containsKey("code")) {
|
|
|
|
|
|
String phone = reqData.getUtfString("phone");
|
|
|
|
|
|
String old_phone = jedis0.hget(acc.redis_key, "phone");
|
|
|
|
|
|
if (StringUtil.isEmpty(old_phone)) {
|
|
|
|
|
|
throw new WebException(ErrorCode.NO_BINDED_PHONE);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!old_phone.equals(phone)) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
String key = RedisKey.VERIFICATION_CODE + phone;
|
|
|
|
|
|
String code_r = jedis0.get(key);
|
|
|
|
|
|
String code = reqData.getUtfString("code");
|
|
|
|
|
|
if (StringUtil.isEmpty(code_r) || !code.equals(code_r)) {
|
|
|
|
|
|
throw new WebException(ErrorCode.INVALID_CODE);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
password = Utils.getMD5Hash(password);
|
|
|
|
|
|
jedis0.hset(acc.redis_key, "password", password);
|
|
|
|
|
|
BaseCache.updateCacheVer(jedis0, acc.redis_key);
|
|
|
|
|
|
|
|
|
|
|
|
String session = getSession();
|
|
|
|
|
|
String curToken = getTokens();
|
|
|
|
|
|
Set<String> tokenSet = jedis0.smembers(session + "_token");
|
|
|
|
|
|
for (String token : tokenSet) {
|
|
|
|
|
|
if (!curToken.equals(token)) {
|
|
|
|
|
|
jedis0.expire(token, 1);
|
|
|
|
|
|
logger.info("password change, delete token:" + token);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
String sql = "UPDATE account SET password='" + password + "' where id=" + acc.id;
|
|
|
|
|
|
DataBase.use().executeUpdate(sql);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 同步微信
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param acc
|
|
|
|
|
|
* @param reqData
|
|
|
|
|
|
*/
|
|
|
|
|
|
private final void userinfo_syn_wx(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
String acc1 = reqData.getUtfString("acc");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(acc1)) {
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
RedisLock lock = new RedisLock("wx_" + acc1, jedis0);
|
|
|
|
|
|
try {
|
|
|
|
|
|
boolean update = false;
|
|
|
|
|
|
String strNick = reqData.getUtfString("nick");
|
|
|
|
|
|
strNick = StringUtil.filterEmoji(strNick);
|
|
|
|
|
|
String portratit = reqData.getUtfString("portrait");
|
|
|
|
|
|
update = !strNick.equals(acc.nick) || !portratit.equals(acc.portrait);
|
|
|
|
|
|
|
|
|
|
|
|
if (update) {
|
|
|
|
|
|
reqData.putUtfString("nick", strNick);
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("portrait", portratit);
|
|
|
|
|
|
userData.putUtfString("nick", strNick);
|
|
|
|
|
|
int sex = reqData.getInt("sex");
|
|
|
|
|
|
if (sex == 0) {
|
|
|
|
|
|
sex = 1;
|
|
|
|
|
|
reqData.putInt("sex", sex);
|
|
|
|
|
|
}
|
|
|
|
|
|
userData.putInt("sex", sex);
|
|
|
|
|
|
DataBase.use().update("account", userData, "id=" + acc.id);
|
|
|
|
|
|
updateSession(userData, acc.id);
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private final void userinfo_portrait(AccountBean acc, ITObject reqData) throws Exception {
|
|
|
|
|
|
logger.info("userinfo_portrait() ============> ");
|
|
|
|
|
|
|
|
|
|
|
|
Integer iii = acc.id;
|
|
|
|
|
|
String acc1 = iii.toString();
|
|
|
|
|
|
if (StringUtil.isNotEmpty(acc1)) {
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
RedisLock lock = new RedisLock("wx_" + acc1, jedis0);
|
|
|
|
|
|
|
|
|
|
|
|
String portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
boolean update = true;
|
|
|
|
|
|
|
|
|
|
|
|
if (update) {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("portrait", portrait);
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().update("account", userData, "id=" + acc.id);
|
|
|
|
|
|
updateSession(userData, acc.id);
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新玩家信息
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.UPDATE_USER_INFO, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void updateUserInfo() throws Exception {
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
ITObject resData = null;
|
|
|
|
|
|
// 1 实名 2 地址 3密码 4手机 5邀请 6微信
|
|
|
|
|
|
int type = reqData.getInt("type");
|
|
|
|
|
|
AccountBean acc = AccountCache.getAccount(session);
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
userinfo_real(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
// userinfo_address(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 3:
|
|
|
|
|
|
userinfo_password(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 5:
|
|
|
|
|
|
userinfo_invitation(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 6:
|
|
|
|
|
|
userinfo_syn_wx(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 8:
|
|
|
|
|
|
userinfo_portrait(acc, reqData);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_USER_INFO, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void getUserInfo() {
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
List<String> s_list = Redis.use("group1_db0").hmget(session, "real_info", "address", "invitation", "phone",
|
|
|
|
|
|
"password");
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
|
|
|
|
|
|
String real_info = s_list.get(0);
|
|
|
|
|
|
if (StringUtil.isNotEmpty(real_info)) {
|
|
|
|
|
|
ITObject real = TObject.newFromJsonData(real_info);
|
|
|
|
|
|
resData.putTObject("real_info", real);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String address = s_list.get(1);
|
|
|
|
|
|
if (StringUtil.isNotEmpty(address)) {
|
|
|
|
|
|
resData.putUtfString("address", address);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String s_invitation = s_list.get(2);
|
|
|
|
|
|
int invitation = 0;
|
|
|
|
|
|
if (StringUtil.isNotEmpty(s_invitation)) {
|
|
|
|
|
|
invitation = Integer.parseInt(s_invitation);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putInt("invitation", invitation);
|
|
|
|
|
|
|
|
|
|
|
|
String phone = s_list.get(3);
|
|
|
|
|
|
if (StringUtil.isNotEmpty(phone)) {
|
|
|
|
|
|
resData.putUtfString("phone", phone);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String password = s_list.get(4);
|
|
|
|
|
|
if (StringUtil.isNotEmpty(password)) {
|
|
|
|
|
|
resData.putUtfString("password", phone);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新信息
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.UPDATE_PLAYER_INFO, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void updatePlayInfo() throws Exception {
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
// AccountBean bean = AccountCache.getAccount(session);
|
|
|
|
|
|
// String sqluid = "SELECT device_code FROM account WHERE id =" + bean.id;
|
|
|
|
|
|
// ITArray resultArrayuid = DataBase.use().executeQueryByTArray(sqluid);
|
|
|
|
|
|
// if (resultArrayuid.size() > 0) {
|
|
|
|
|
|
// ITObject userData = resultArrayuid.getTObject(0);
|
|
|
|
|
|
//
|
|
|
|
|
|
// String deviceCode = userData.getString("device_code");
|
|
|
|
|
|
// Set<String> banDeviceList = Redis.use("group1_db1").smembers("bandevice");
|
|
|
|
|
|
// for (String banDevice : banDeviceList) {
|
|
|
|
|
|
// if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
List<String> s_list = Redis.use("group1_db0").hmget(session, "id", "diamo", "invitation");
|
|
|
|
|
|
|
|
|
|
|
|
int diamo = Integer.parseInt(s_list.get(1));
|
|
|
|
|
|
resData.putInt("diamo", diamo);
|
|
|
|
|
|
String s_invitation = s_list.get(2);
|
|
|
|
|
|
|
|
|
|
|
|
int invitation = 0;
|
|
|
|
|
|
if (StringUtil.isNotEmpty(s_invitation)) {
|
|
|
|
|
|
invitation = Integer.parseInt(s_invitation);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putInt("invitation", invitation);
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static String updateSession(ITObject userData, int id) {
|
|
|
|
|
|
String session = AccountCache.genKey(id);
|
|
|
|
|
|
Map<String, String> map = new HashMap<String, String>();
|
|
|
|
|
|
Utils.objectToMap(userData, map);
|
|
|
|
|
|
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
jedis0.hmset(session, map);
|
|
|
|
|
|
BaseCache.updateCacheVer(jedis0, session);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis0.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return session;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取在线游戏
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static ITArray getOnlineGames() {
|
|
|
|
|
|
ITArray games = new TArray();
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
try {
|
|
|
|
|
|
Set<String> list = jedis1.zrevrangeByScore("online_games", 1000, 1);
|
|
|
|
|
|
for (String game : list) {
|
|
|
|
|
|
int gameId = Integer.parseInt(game);
|
|
|
|
|
|
GameBean gb = GameCache.getGame(gameId);
|
|
|
|
|
|
if (gb == null)
|
|
|
|
|
|
continue;
|
|
|
|
|
|
ITObject gameObj = gb.getTObject();
|
|
|
|
|
|
|
|
|
|
|
|
for (Entry<String, Integer> entry : gb.pay.entrySet()) {
|
|
|
|
|
|
gameObj.putInt(entry.getKey(), entry.getValue());
|
|
|
|
|
|
}
|
|
|
|
|
|
games.addTObject(gameObj);
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
return games;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新信息
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.SET_BACK_PASSWORD, validate = WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void setBackPassword() throws Exception {
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
String password = object.get("password").toString().replaceAll("\"", "");
|
|
|
|
|
|
Integer id = Integer.parseInt(object.get("id").toString().replaceAll("\"", ""));
|
|
|
|
|
|
password = Utils.getMD5Hash(password);
|
|
|
|
|
|
String oldsql = String.format("SELECT * FROM account WHERE password=? and id =? ");
|
|
|
|
|
|
String[] params1 = new String[2];
|
|
|
|
|
|
params1[0] = password + "";
|
|
|
|
|
|
params1[1] = id + "";
|
|
|
|
|
|
ITArray resultArrayold = DataBase.use().executeQueryByTArrayLogin(oldsql, params1);
|
|
|
|
|
|
if (resultArrayold.size() > 0) {
|
|
|
|
|
|
AccountBean bean = AccountCache.getAccount(session);
|
|
|
|
|
|
String newsql = "SELECT * FROM account WHERE id =" + bean.id;
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = bean.id + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArrayNew = DataBase.use().executeQueryByTArrayLogin(newsql, params);
|
|
|
|
|
|
if (resultArrayNew.size() > 0) {
|
|
|
|
|
|
ITObject userData = resultArrayNew.getTObject(0);
|
|
|
|
|
|
// 获取到openId
|
|
|
|
|
|
String acc = userData.getString("acc");
|
|
|
|
|
|
String deviceCode = userData.getString("device_code");
|
|
|
|
|
|
// 将新账号的openId清零
|
|
|
|
|
|
String updateNewAccsql = String.format("update account set acc='%s' WHERE id =%s",
|
|
|
|
|
|
bean.id + "_" + System.currentTimeMillis() + "_del", bean.id);
|
|
|
|
|
|
DataBase.use().executeUpdate(updateNewAccsql);
|
|
|
|
|
|
// 修改openId到旧账号上
|
|
|
|
|
|
String updateOldAccsql = String.format("update account set acc=?,device_code=? WHERE id =?");
|
|
|
|
|
|
String[] params2 = new String[3];
|
|
|
|
|
|
params2[0] = acc + "";
|
|
|
|
|
|
params2[0] = deviceCode + "";
|
|
|
|
|
|
params2[0] = id + "";
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdateLogin(updateOldAccsql, params2);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新信息
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
// @ActionKey(value = Protocol.GET_APP_INFO, validate =
|
|
|
|
|
|
// WebInterceptor.V_SESSION)
|
|
|
|
|
|
public final void getAppInfo_bak() throws Exception {
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
try {
|
|
|
|
|
|
String appid = jedis1.hget("appinfo", "appid");
|
|
|
|
|
|
String appSecret = jedis1.hget("appinfo", "appSecret");
|
|
|
|
|
|
|
|
|
|
|
|
String appInfo = "{\"appid\":\"" + appid + "\",\"appSecret\":\"" + appSecret + "\"}";
|
|
|
|
|
|
// logger.info("加密前的数据:" + appInfo);
|
|
|
|
|
|
|
|
|
|
|
|
String encryptText = RSAUtils.encrypt(appInfo, RSAUtils.appIdPublicKey);
|
|
|
|
|
|
resData.putString("appInfo", encryptText);
|
|
|
|
|
|
// logger.info("加密后的数据:" + encryptText);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
|
|
// * 登录
|
|
|
|
|
|
// *
|
|
|
|
|
|
// * @throws Exception
|
|
|
|
|
|
// */
|
|
|
|
|
|
// @ActionKey(value = Protocol.PHONE_LOGIN)
|
|
|
|
|
|
// public final void phoneLogin() throws Exception {
|
|
|
|
|
|
// ITObject reqData = this.getParams();
|
|
|
|
|
|
// String phone = reqData.getUtfString("phone");
|
|
|
|
|
|
// String deviceCode = reqData.getUtfString("deviceCode");
|
|
|
|
|
|
// String password = reqData.getUtfString("password");
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtils.isEmpty(deviceCode)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// String accessDevice = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(accessDevice)) {
|
|
|
|
|
|
// String accessDeviceCount = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
// long count = Long.parseLong(accessDeviceCount);
|
|
|
|
|
|
// count = count + 1;
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
//
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, "1");
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtil.isEmpty(password)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// // 检测设备是否已经被禁用
|
|
|
|
|
|
// Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
// Set<String> banDeviceList = jedis1.smembers("bandevice");
|
|
|
|
|
|
// for (String banDevice : banDeviceList) {
|
|
|
|
|
|
// if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
// jedis1.close();
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// jedis1.close();
|
|
|
|
|
|
//
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// String sql = String.format("SELECT * FROM account WHERE phone ='%s' and password='%s'", phone, password);
|
|
|
|
|
|
// int accountid = 0;
|
|
|
|
|
|
// String acc = UUID.randomUUID().toString();
|
|
|
|
|
|
// ITArray resultArray = DataBase.use().executeQueryByTArray(sql);
|
|
|
|
|
|
// // 检测手机号是否已经注册
|
|
|
|
|
|
// if (resultArray.size() == 0) {
|
|
|
|
|
|
// reqData.putInt("sex", 2);
|
|
|
|
|
|
// reqData.putString("portrait",
|
|
|
|
|
|
// "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4exujSvSgtiaGYGCiaRFCNdBLBUxlWoHFpVRhMiaAg397BFm26uYh39eyUAzPCkhuuY331vbXDyIPGQ/132");
|
|
|
|
|
|
// reqData.putString("nick", "手机用户" + UUID.randomUUID());
|
|
|
|
|
|
// reqData.putString("acc", acc);
|
|
|
|
|
|
// accountid = register(reqData);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
// UpdateUserData(userData, accountid);
|
|
|
|
|
|
// logger.info("phone:" + phone + ", device_code=" + deviceCode);
|
|
|
|
|
|
// String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where phone=" + phone;
|
|
|
|
|
|
// DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
// String session = acc_bean.redis_key;
|
|
|
|
|
|
// this.setSession(session);
|
|
|
|
|
|
// String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
// logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
// throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
// String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis() + "e4!Fesu]]{QyUuEA"
|
|
|
|
|
|
// + Math.random() * 1000000);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
// Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
// Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
// for (String temp : allToken) {
|
|
|
|
|
|
// if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
// Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
// logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
// if (tokenNum >= 10) {
|
|
|
|
|
|
// logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// resData.putString("token", token);
|
|
|
|
|
|
//
|
|
|
|
|
|
// this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// /**
|
|
|
|
|
|
// * 登录
|
|
|
|
|
|
// *
|
|
|
|
|
|
// * @throws Exception
|
|
|
|
|
|
// */
|
|
|
|
|
|
// @ActionKey(value = Protocol.PHONE_LOGIN_2)
|
|
|
|
|
|
// public final void phoneLogin_2() throws Exception {
|
|
|
|
|
|
// ITObject reqData = this.getParams();
|
|
|
|
|
|
// String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
// JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
// String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
// String password = object.get("password").toString().replaceAll("\"", "");
|
|
|
|
|
|
// String phone = object.get("phone").toString().replaceAll("\"", "");
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtils.isEmpty(deviceCode)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// String accessDevice = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(accessDevice)) {
|
|
|
|
|
|
// String accessDeviceCount = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
// long count = Long.parseLong(accessDeviceCount);
|
|
|
|
|
|
// count = count + 1;
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
//
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// Redis.use("group1_db0").hset("device:accessDevice", deviceCode, "1");
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (StringUtil.isEmpty(password)) {
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// // 检测设备是否已经被禁用
|
|
|
|
|
|
// Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
// Set<String> banDeviceList = jedis1.smembers("bandevice");
|
|
|
|
|
|
// for (String banDevice : banDeviceList) {
|
|
|
|
|
|
// if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
// jedis1.close();
|
|
|
|
|
|
// throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// jedis1.close();
|
|
|
|
|
|
//
|
|
|
|
|
|
// password = Utils.getMD5Hash(password);
|
|
|
|
|
|
// String sql = String.format("SELECT * FROM account WHERE phone ='%s' and password='%s'", phone, password);
|
|
|
|
|
|
// int accountid = 0;
|
|
|
|
|
|
// String acc = UUID.randomUUID().toString();
|
|
|
|
|
|
// ITArray resultArray = DataBase.use().executeQueryByTArray(sql);
|
|
|
|
|
|
// // 检测手机号是否已经注册
|
|
|
|
|
|
// if (resultArray.size() == 0) {
|
|
|
|
|
|
// reqData.putInt("sex", 2);
|
|
|
|
|
|
// reqData.putString("portrait",
|
|
|
|
|
|
// "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4exujSvSgtiaGYGCiaRFCNdBLBUxlWoHFpVRhMiaAg397BFm26uYh39eyUAzPCkhuuY331vbXDyIPGQ/132");
|
|
|
|
|
|
// reqData.putString("nick", "手机用户" + UUID.randomUUID());
|
|
|
|
|
|
// reqData.putString("acc", acc);
|
|
|
|
|
|
// accountid = register(reqData);
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
// UpdateUserData(userData, accountid);
|
|
|
|
|
|
// logger.info("phone:" + phone + ", device_code=" + deviceCode);
|
|
|
|
|
|
// String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where phone=" + phone;
|
|
|
|
|
|
// DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
// AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
// String session = acc_bean.redis_key;
|
|
|
|
|
|
// this.setSession(session);
|
|
|
|
|
|
// String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
// if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
// logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
// throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
// String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis() + "e4!Fesu]]{QyUuEA"
|
|
|
|
|
|
// + Math.random() * 1000000);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
// Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
// Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
//
|
|
|
|
|
|
// Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
// for (String temp : allToken) {
|
|
|
|
|
|
// if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
// Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
// logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
// if (tokenNum >= 10) {
|
|
|
|
|
|
// logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// resData.putString("token", token);
|
|
|
|
|
|
//
|
|
|
|
|
|
// this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
//
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 绑定列表
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_BANGDING_ACCOUNT)
|
|
|
|
|
|
public final void get_bangding_account() throws Exception {
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
AccountBean acc = AccountCache.getAccount(session);
|
|
|
|
|
|
logger.info("acc:" + acc + " get_bangding_account");
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
String sql = "SELECT * FROM account WHERE device_code =(select device_code from account where id=?) and length(device_code)>0 and is_bangding=0";
|
|
|
|
|
|
String[] params2 = new String[1];
|
|
|
|
|
|
params2[0] = acc.id + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params2);
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
resData.putTArray("accounts", resultArray);
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 绑定列表
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.BANGDING_ACCOUNT)
|
|
|
|
|
|
public final void bangding_account() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
AccountBean acc = AccountCache.getAccount(session);
|
|
|
|
|
|
int tagId = reqData.getInt("tagId");
|
|
|
|
|
|
String pwd = reqData.getString("password");
|
|
|
|
|
|
logger.info("acc:" + acc.id + " get_bangding_account" + pwd);
|
|
|
|
|
|
try {
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
|
|
|
|
|
|
String sql = "SELECT acc,id,nick,portrait,device_code,is_bangding FROM account WHERE id=?";
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = acc.id + "";
|
|
|
|
|
|
String tagDeviceCode = "";
|
|
|
|
|
|
String openId = "";
|
|
|
|
|
|
ITArray tagResultArray = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (tagResultArray.size() > 0) {
|
|
|
|
|
|
ITObject userData = tagResultArray.getTObject(0);
|
|
|
|
|
|
tagDeviceCode = userData.getString("device_code");
|
|
|
|
|
|
openId = userData.getString("acc");
|
|
|
|
|
|
resData.putTObject("account", userData);
|
|
|
|
|
|
if (userData.getInt("is_bangding") == 1) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String sql3 = "SELECT * FROM account where id=? and password=?";
|
|
|
|
|
|
String[] paramspwd = new String[2];
|
|
|
|
|
|
paramspwd[0] = tagId + "";
|
|
|
|
|
|
paramspwd[1] = Utils.getMD5Hash(pwd);
|
|
|
|
|
|
|
|
|
|
|
|
ITArray pwdResultArray = DataBase.use().executeQueryByTArrayLogin(sql3, paramspwd);
|
|
|
|
|
|
if (pwdResultArray.size() == 0) {
|
|
|
|
|
|
logger.info("lingmeng========================================================2");
|
|
|
|
|
|
throw new WebException(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String sql2 = "SELECT * FROM account WHERE id=?";
|
|
|
|
|
|
String[] params2 = new String[1];
|
|
|
|
|
|
params2[0] = acc.id + "";
|
|
|
|
|
|
String selfDeviceCode = "";
|
|
|
|
|
|
ITArray selfResultArray = DataBase.use().executeQueryByTArrayLogin(sql2, params2);
|
|
|
|
|
|
if (selfResultArray.size() > 0) {
|
|
|
|
|
|
ITObject userData = selfResultArray.getTObject(0);
|
|
|
|
|
|
selfDeviceCode = userData.getString("device_code");
|
|
|
|
|
|
}
|
|
|
|
|
|
if (tagDeviceCode.equalsIgnoreCase(selfDeviceCode) && tagDeviceCode.length() > 0
|
|
|
|
|
|
&& selfDeviceCode.length() > 0) {
|
|
|
|
|
|
// 将新账号的openId清零
|
|
|
|
|
|
|
|
|
|
|
|
// 修改openId到旧账号上
|
|
|
|
|
|
String updateOldAccsql = String.format("update account set acc=?,is_bangding=1 WHERE id =?");
|
|
|
|
|
|
String[] params3 = new String[2];
|
|
|
|
|
|
params3[0] = acc.id + "_" + "del";
|
|
|
|
|
|
params3[1] = acc.id + "";
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdateLogin(updateOldAccsql, params3);
|
|
|
|
|
|
|
|
|
|
|
|
// String updateNewAccsql = String.format("update account set
|
|
|
|
|
|
// acc='%s',is_bangding=1 WHERE id =%s",
|
|
|
|
|
|
// tagId + "_" + System.currentTimeMillis() + "_del", acc.id);
|
|
|
|
|
|
String updateNewAccsql = String.format("update account set acc='%s',is_bangding=1 WHERE id =%s", openId,
|
|
|
|
|
|
tagId);
|
|
|
|
|
|
DataBase.use().executeUpdate(updateNewAccsql);
|
|
|
|
|
|
|
|
|
|
|
|
// ITObject userData = tagResultArray.getTObject(0);
|
|
|
|
|
|
// userData.putString("acc", tagId + "_" + System.currentTimeMillis());
|
|
|
|
|
|
// UpdateUserData(userData, acc.id);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
throw e;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取用户ip
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_USER_IP)
|
|
|
|
|
|
public final void get_user_ip() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String ip = reqData.getUtfString("ip");
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
AccountBean acc = AccountCache.getAccount(session);
|
|
|
|
|
|
logger.info("get user ip:" + ip);
|
|
|
|
|
|
String sql = String.format("insert into account_ip_log(user_id,user_ip,time) values('%s','%s',%s)", acc.id, ip,
|
|
|
|
|
|
System.currentTimeMillis() / 1000);
|
|
|
|
|
|
logger.info("sql:" + sql);
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdate(sql);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_APP_LINE)
|
|
|
|
|
|
public final void getAppLine() throws Exception {
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String deviceType = reqData.getString("deviceType");
|
|
|
|
|
|
String line = reqData.getString("line");
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
String appid = Redis.use("group1_db1").hget("appLine", "appid_" + deviceType);
|
|
|
|
|
|
String appSecret = Redis.use("group1_db1").hget("appLine:" + line, "appSecret_" + deviceType);
|
|
|
|
|
|
String appInfo = "{\"appid\":\"" + appid + "\",\"appSecret\":\"" + appSecret + "\"}";
|
|
|
|
|
|
logger.info("加密前的数据appLine:" + appInfo);
|
|
|
|
|
|
String encryptText = RSAUtils.encrypt(appInfo, RSAUtils.appIdPublicKey);
|
|
|
|
|
|
reqData.putString("appLine", encryptText);
|
|
|
|
|
|
logger.info("加密后的数据appLine:" + encryptText);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_TOTAL_LINE)
|
|
|
|
|
|
public final void getTotalLine() throws Exception {
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String deviceType = reqData.getString("deviceType").toLowerCase();
|
|
|
|
|
|
ITArray list = TArray.newInstance();
|
|
|
|
|
|
try {
|
|
|
|
|
|
for (int i = 1; i <= 8; i++) { // 注意:line是从1开始,不是0
|
|
|
|
|
|
String key = "appLine:line" + i;
|
|
|
|
|
|
if (!jedis1.exists(key)) {
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
Map<String, String> hashValues = jedis1.hgetAll(key);
|
|
|
|
|
|
if (hashValues != null && !hashValues.isEmpty()) {
|
|
|
|
|
|
// 过滤出指定设备类型的配置
|
|
|
|
|
|
Map<String, String> filteredConfig = filterHashConfig(hashValues, deviceType);
|
|
|
|
|
|
if (!filteredConfig.isEmpty()) {
|
|
|
|
|
|
// 将过滤后的配置添加到结果中
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(filteredConfig.toString(), JsonObject.class);
|
|
|
|
|
|
logger.info("object:" + object);
|
|
|
|
|
|
ITObject line = TObject.newFromJsonData(object.toString());
|
|
|
|
|
|
list.addTObject(line);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
reqData.putTArray("appLine", list);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, String> filterHashConfig(Map<String, String> hashConfig, String deviceType) {
|
|
|
|
|
|
Map<String, String> result = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, String> entry : hashConfig.entrySet()) {
|
|
|
|
|
|
String key = entry.getKey();
|
|
|
|
|
|
String value = entry.getValue();
|
|
|
|
|
|
|
|
|
|
|
|
// 检查键是否包含指定的设备类型
|
|
|
|
|
|
if (key.contains(deviceType)) {
|
|
|
|
|
|
result.put(key, value);
|
|
|
|
|
|
logger.debug("Found {} config: {} = {}", deviceType, key, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ActionKey(value = Protocol.GET_APP_LAST)
|
|
|
|
|
|
public final void getAppLast() throws Exception {
|
|
|
|
|
|
Jedis jedis1 = Redis.use("group1_db1").getJedis();
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
String deviceCode = reqData.getString("deviceCode");
|
|
|
|
|
|
try {
|
|
|
|
|
|
String appid = jedis1.hget("appDevice:" + deviceCode, "appid");
|
|
|
|
|
|
String appSecret = jedis1.hget("appDevice:" + deviceCode, "appSecret");
|
|
|
|
|
|
String appInfo = "{\"appid\":\"" + appid + "\",\"appSecret\":\"" + appSecret + "\"}";
|
|
|
|
|
|
logger.info("加密前的数据appLine:" + appInfo);
|
|
|
|
|
|
String encryptText = RSAUtils.encrypt(appInfo, RSAUtils.appIdPublicKey);
|
|
|
|
|
|
reqData.putString("appInfo", encryptText);
|
|
|
|
|
|
logger.info("加密后的数据" + encryptText);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
jedis1.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, reqData);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 绑定列表
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.LOCK_DEVICE)
|
|
|
|
|
|
public final void lock_device() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String session = this.getSession();
|
|
|
|
|
|
AccountBean acc = AccountCache.getAccount(session);
|
|
|
|
|
|
int lockType = reqData.getInt("lockType");
|
|
|
|
|
|
if (lockType > 1) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
logger.info("acc:" + acc.id + " lockType" + lockType);
|
|
|
|
|
|
try {
|
|
|
|
|
|
ITObject resData = TObject.newInstance();
|
|
|
|
|
|
|
|
|
|
|
|
String sql = "update account set is_lock=? WHERE id=?";
|
|
|
|
|
|
String[] params1 = new String[2];
|
|
|
|
|
|
params1[0] = lockType + "";
|
|
|
|
|
|
params1[1] = acc.id + "";
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdateLogin(sql, params1);
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
logger.error(e);
|
|
|
|
|
|
throw e;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-27 16:25:13 +08:00
|
|
|
|
@ActionKey(value = Protocol.PHONE_LOGIN_2)
|
|
|
|
|
|
public final void phoneLogin2() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
reqData.putString("phone", "phone");
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
String loginToken = reqData.getString("loginToken");
|
|
|
|
|
|
logger.info("==========>decryptedText = " + decryptedText);
|
|
|
|
|
|
logger.info("==========>loginToken = " + loginToken);
|
|
|
|
|
|
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
// String loginToken = object.get("loginToken").toString().replaceAll("\"", "");
|
|
|
|
|
|
String phone = "";
|
|
|
|
|
|
// 加密后的phone
|
|
|
|
|
|
// Response: {"id":1086340087656099840,"code":8000,"content":"get phone success","exID":null,"phone":"BdmUpwKjrxxdBKivExn2DirpAq0/XkKcg1u2B3Jbd45npyn8Z6ZAa+Wzuj31FQ05y00llfilZT1dB9+0T4Gb9XZgXB1Ti+ohAVCbRXV8JeRzIY1gcQEhdKS+Ei5LBiEdWQAV09o4nFzAQIOwSojzZwJeuQF1Nh00I89lYzHzjEM=","score":0,"riskCheck":{"code":0,"content":"success","score":0,"tags":null,"detail":null}}
|
|
|
|
|
|
try {
|
|
|
|
|
|
String phoneJson = PhoneCheck.getCheck(loginToken);
|
|
|
|
|
|
JsonObject phoneObject = new Gson().fromJson(phoneJson, JsonObject.class);
|
|
|
|
|
|
String phoneRSA = phoneObject.get("phone").toString();
|
|
|
|
|
|
phone = PhoneRSAUtils.decrypt(phoneRSA);
|
|
|
|
|
|
logger.info("==========>phone = " + phone);
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (phone.length() < 11) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(deviceCode)) {
|
|
|
|
|
|
logger.error("deviceCode:null" + "--" + ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
String accessDevice = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtil.isNotEmpty(accessDevice)) {
|
|
|
|
|
|
String accessDeviceCount = Redis.use("group1_db0").hget("device:accessDevice", deviceCode);
|
|
|
|
|
|
long count = Long.parseLong(accessDeviceCount);
|
|
|
|
|
|
if (count < 1000) {
|
|
|
|
|
|
count = count + 1;
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, count + "");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
throw new WebException(ErrorCode._NO_SESSION);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Redis.use("group1_db0").hset("device:accessDevice", deviceCode, "1");
|
|
|
|
|
|
Redis.use("group1_db0").expire("device:accessDevice", 86400);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String sql = String.format("SELECT a.* FROM account a,account_phone ap WHERE ap.phone=? and ap.uid=a.id");
|
|
|
|
|
|
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = phone + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
// 手机号码第一次注册
|
|
|
|
|
|
int accountid = register(reqData);
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
// 保存手机号码
|
|
|
|
|
|
String phoneSql = String.format("insert into account_phone(uid,phone) values('%s','%s')", accountid, phone);
|
|
|
|
|
|
DataBase.use().executeUpdate(phoneSql);
|
|
|
|
|
|
|
|
|
|
|
|
String token = Utils.getMD5Hash(accountid + "_" + phone + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
resData.putInt("is_lock", 1);
|
|
|
|
|
|
// 保存设备登录日志
|
|
|
|
|
|
String loginSql = String.format(
|
|
|
|
|
|
"insert into account_device_code_log(user_id,device_code,time) values('%s','%s',%s)", accountid,
|
|
|
|
|
|
deviceCode, System.currentTimeMillis() / 1000);
|
|
|
|
|
|
DataBase.use().executeUpdate(loginSql);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
// 判断设备是否已经锁定
|
|
|
|
|
|
int isLock = resultArray.getTObject(0).getInt("is_lock");
|
|
|
|
|
|
String saveDeviceCode = resultArray.getTObject(0).getString("device_code");
|
|
|
|
|
|
|
|
|
|
|
|
if (isLock == 1 && !deviceCode.equalsIgnoreCase(saveDeviceCode)) {
|
|
|
|
|
|
throw new WebException(ErrorCode.IS_LOCK);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> banDeviceList = Redis.use("group1_db1").smembers("bandevice");
|
|
|
|
|
|
for (String banDevice : banDeviceList) {
|
|
|
|
|
|
if (banDevice.equalsIgnoreCase(deviceCode)) {
|
|
|
|
|
|
logger.error("deviceCode:" + deviceCode + "--" + ErrorCode._FAILED);
|
|
|
|
|
|
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray.getTObject(0);
|
|
|
|
|
|
int accountid = userData.getInt("id");
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData1 = TObject.newInstance();
|
|
|
|
|
|
userData1.putUtfString("nick", userData.getUtfString("nick"));
|
|
|
|
|
|
userData1.putUtfString("portrait", userData.getUtfString("portrait"));
|
|
|
|
|
|
userData1.putInt("sex", userData.getInt("sex"));
|
|
|
|
|
|
updateSession(userData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
logger.info("phone:" + phone + ", device_code=" + deviceCode);
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(accountid + "_" + phone + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
resData.putInt("is_lock", isLock);
|
|
|
|
|
|
// 保存设备登录日志
|
|
|
|
|
|
String loginSql = String.format(
|
|
|
|
|
|
"insert into account_device_code_log(user_id,device_code,time) values('%s','%s',%s)", accountid,
|
|
|
|
|
|
deviceCode, System.currentTimeMillis() / 1000);
|
|
|
|
|
|
|
|
|
|
|
|
DataBase.use().executeUpdate(loginSql);
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-01 19:24:36 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 加密登录2
|
|
|
|
|
|
*
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
@ActionKey(value = Protocol.REGIST_LOGIN_3)
|
|
|
|
|
|
public final void login3() throws Exception {
|
|
|
|
|
|
ITObject reqData = this.getParams();
|
|
|
|
|
|
|
|
|
|
|
|
String decryptedText = RSAUtils.decrypt(reqData.getString("data"));
|
|
|
|
|
|
JsonObject object = new Gson().fromJson(decryptedText, JsonObject.class);
|
|
|
|
|
|
logger.info("解密后:" + object);
|
|
|
|
|
|
|
|
|
|
|
|
String deviceCode = object.get("deviceCode").toString().replaceAll("\"", "");
|
|
|
|
|
|
String code = object.get("code").toString().replaceAll("\"", "");
|
|
|
|
|
|
String line = object.get("line").toString().replaceAll("\"", "");
|
|
|
|
|
|
String deviceType = object.get("deviceType").toString().replaceAll("\"", "");
|
|
|
|
|
|
String appLineKey = "appLine:line" + line;
|
|
|
|
|
|
logger.info("appLineKey:" + appLineKey);
|
|
|
|
|
|
String appid = Redis.use("group1_db1").hget(appLineKey, "appid_" + deviceType.toLowerCase());
|
|
|
|
|
|
String appSecret = Redis.use("group1_db1").hget(appLineKey, "appSecret_" + deviceType.toLowerCase());
|
|
|
|
|
|
JSONObject wechatObject = WeChatOpenIdValidator.getOpenIdByCode(code, appid, appSecret);
|
|
|
|
|
|
String access_token = wechatObject.getString("access_token");
|
|
|
|
|
|
|
|
|
|
|
|
String acc = wechatObject.getString("unionid");
|
|
|
|
|
|
logger.info("wechatObject请求成功:" + wechatObject);
|
|
|
|
|
|
JSONObject userinfoObject = WeChatOpenIdValidator.getUserInfoByOpenId(access_token, acc);
|
|
|
|
|
|
logger.info("userinfoObject请求成功:" + userinfoObject);
|
|
|
|
|
|
|
|
|
|
|
|
reqData.putUtfString("acc", acc);
|
|
|
|
|
|
reqData.putUtfString("code", code);
|
|
|
|
|
|
Jedis jedis0 = Redis.use("group1_db0").getJedis();
|
|
|
|
|
|
RedisLock lock = new RedisLock("wx_" + code, jedis0);
|
|
|
|
|
|
try {
|
|
|
|
|
|
String sql = "SELECT * FROM account WHERE acc =?";
|
|
|
|
|
|
String[] params = new String[1];
|
|
|
|
|
|
params[0] = reqData.getUtfString("acc") + "";
|
|
|
|
|
|
ITArray resultArray = DataBase.use().executeQueryByTArrayLogin(sql, params);
|
|
|
|
|
|
|
|
|
|
|
|
String strNick = userinfoObject.get("nickname").toString().replaceAll("\"", "");
|
|
|
|
|
|
String portrait = userinfoObject.get("headimgurl").toString().replaceAll("\"", "");
|
|
|
|
|
|
|
|
|
|
|
|
strNick = StringUtil.filterEmoji(strNick);
|
|
|
|
|
|
reqData.putUtfString("nick", strNick);
|
|
|
|
|
|
reqData.putUtfString("portrait", portrait);
|
|
|
|
|
|
|
|
|
|
|
|
int accountid = 0;
|
|
|
|
|
|
if (resultArray.size() == 0) {
|
|
|
|
|
|
reqData.putInt("sex", Integer.parseInt(userinfoObject.get("sex").toString().replaceAll("\"", "")));
|
|
|
|
|
|
accountid = register(reqData);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
ITObject obj = resultArray.getTObject(0);
|
|
|
|
|
|
accountid = obj.getInt("id");
|
|
|
|
|
|
String updateDeviceCodeSql = "update account set device_code ='" + deviceCode + "' where id="
|
|
|
|
|
|
+ accountid;
|
|
|
|
|
|
DataBase.use().executeUpdate(updateDeviceCodeSql);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (acc.equals(accountid + "")) {
|
|
|
|
|
|
logger.error("id:" + accountid + " == acc:" + acc + " limit login");
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AccountBean acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
if (acc_bean == null) {
|
|
|
|
|
|
sql = String.format("SELECT * FROM account WHERE id =?");
|
|
|
|
|
|
String[] params1 = new String[1];
|
|
|
|
|
|
params1[0] = accountid + "";
|
|
|
|
|
|
|
|
|
|
|
|
ITArray resultArray2 = DataBase.use().executeQueryByTArrayLogin(sql, params1);
|
|
|
|
|
|
if (resultArray2.size() == 0) {
|
|
|
|
|
|
throw new WebException(ErrorCode._FAILED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject userData = resultArray2.getTObject(0);
|
|
|
|
|
|
UpdateUserData(userData, accountid);
|
|
|
|
|
|
|
|
|
|
|
|
acc_bean = AccountCache.getAccount(accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
String session = acc_bean.redis_key;
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
|
|
|
|
|
|
if (resultArray.size() > 0) {
|
|
|
|
|
|
this.setSession(session);
|
|
|
|
|
|
String old_nick = acc_bean.nick;
|
|
|
|
|
|
String old_portrait = acc_bean.portrait;
|
|
|
|
|
|
String new_nick = reqData.getUtfString("nick");
|
|
|
|
|
|
String new_portrait = reqData.getUtfString("portrait");
|
|
|
|
|
|
if (!old_nick.equals(new_nick) || !old_portrait.equals(new_portrait)) {
|
|
|
|
|
|
ITObject userData = TObject.newInstance();
|
|
|
|
|
|
userData.putUtfString("nick", userinfoObject.get("nickname").toString().replaceAll("\"", ""));
|
|
|
|
|
|
userData.putUtfString("portrait", userinfoObject.get("headimgurl").toString().replaceAll("\"", ""));
|
|
|
|
|
|
userData.putInt("sex", Integer.parseInt(userinfoObject.get("sex").toString().replaceAll("\"", "")));
|
|
|
|
|
|
updateSession(reqData, accountid);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String idPwdBan = Redis.use("group1_db0").get(acc_bean.id + "_login_ban");
|
|
|
|
|
|
if (StringUtil.isNotEmpty(idPwdBan)) {
|
|
|
|
|
|
logger.error("id:" + acc_bean.id + " ban login");
|
|
|
|
|
|
throw new WebException(ErrorCode.BAN_LOGIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ITObject resData = fillLoginData(session, accountid);
|
|
|
|
|
|
String token = Utils.getMD5Hash(acc + "_" + accountid + "_" + System.currentTimeMillis()
|
|
|
|
|
|
+ "e4!Fesu]]{QyUuEA" + Math.random() * 1000000);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").sadd(session + "_token", token);
|
|
|
|
|
|
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "user", session);
|
|
|
|
|
|
Redis.use("group1_db0").hset(token, "create_time", "" + System.currentTimeMillis() / 1000);
|
|
|
|
|
|
Redis.use("group1_db0").expire(token, 172800);
|
|
|
|
|
|
|
|
|
|
|
|
Set<String> allToken = Redis.use("group1_db0").smembers(session + "_token");
|
|
|
|
|
|
for (String temp : allToken) {
|
|
|
|
|
|
if (!Redis.use("group1_db0").exists(temp)) {
|
|
|
|
|
|
Redis.use("group1_db0").srem(session + "_token", temp);
|
|
|
|
|
|
logger.info("delte timeout token:" + temp);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
long tokenNum = Redis.use("group1_db0").scard(session + "_token");
|
|
|
|
|
|
if (tokenNum >= 10) {
|
|
|
|
|
|
logger.warn("id:" + accountid + " repeat login, token count:" + tokenNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
resData.putString("token", token);
|
|
|
|
|
|
resData.putBoolean("havePassword", true);
|
|
|
|
|
|
resData.putBoolean("havegroup", true);
|
|
|
|
|
|
resData.putString("isBangding", "1");
|
|
|
|
|
|
|
|
|
|
|
|
// // 默认锁住账户
|
|
|
|
|
|
// String lockSql = "update account set is_lock=? WHERE id=?";
|
|
|
|
|
|
// String[] params3 = new String[2];
|
|
|
|
|
|
// params3[0] = 1 + "";
|
|
|
|
|
|
// params3[1] = accountid + "";
|
|
|
|
|
|
//
|
|
|
|
|
|
// DataBase.use().executeUpdateLogin(lockSql, params3);
|
|
|
|
|
|
|
|
|
|
|
|
this.sendResponse(ErrorCode._SUCC, resData);
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-18 06:48:37 +08:00
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
String[] params1 = new String[2];
|
|
|
|
|
|
params1[0] = "123" + "";
|
|
|
|
|
|
params1[1] = "4444" + "";
|
|
|
|
|
|
System.out.println(params1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|