package com.ljsd.controller; import com.alibaba.fastjson.JSONObject; import com.ljsd.redis.RedisKey; import com.ljsd.util.BaseGlobal; import com.ljsd.util.EncryptUtils; import com.ljsd.util.HttpUtils; import com.ljsd.util.KTSDKConstans; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.*; public class GetUserController extends HttpServlet { private final static String _COLLECTION_NAME = "user_info"; private static final Logger LOGGER = LoggerFactory.getLogger(GetUserController.class); public static int isTestLan=0; public static void initLanState(){ Properties properties = BaseGlobal.getInstance().properties; isTestLan = Integer.parseInt(properties.getProperty("isTestLan")); } public GetUserController() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String openId = request.getParameter("openId"); if (openId == null || openId.isEmpty()) { response.sendError(400, "openId is empety"); return; } LOGGER.info("the opendId = {}",openId); String serverId = request.getParameter("serverId"); if (serverId == null || serverId.isEmpty()) { response.sendError(400, "serverId is empety"); return; } String token = request.getParameter("token"); if (token == null || serverId.isEmpty()) { response.sendError(400, "token is empety"); return; } String platform = request.getParameter("platform"); //平台类型 if (platform == null || platform.isEmpty()) { response.sendError(400, "platform is empety"); return; } try { if(isTestLan==1){ boolean result = loginVerfifyByTestLan(openId, token); if(!result){ response.sendError(400, "verify fail"); return; } }else if(!"3".equals(platform)){ boolean result = loginVerfify(platform, openId, token); if(!result){ response.sendError(400, "verify fail"); return; } } response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); DBObject dbObject = new BasicDBObject(); dbObject.put("openId", openId); dbObject.put("serverId", serverId); dbObject.put("platform", platform); int uid = 0; List userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject); DBObject res = new BasicDBObject(); if (userInfos.size() == 0) { uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000; dbObject.put("uid", uid); dbObject.put("_id", uid); userInfos.add(dbObject); BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject); } Random random = new Random(); int utoken = Math.abs(random.nextInt()); uid = (int) userInfos.get(0).get("uid"); res.put("uid", uid); res.put("token", utoken); BaseGlobal.getInstance().redisApp.set(RedisKey.TOKEN, String.valueOf(uid), token, -1, false); PrintWriter out = response.getWriter(); out.print(res); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } public static boolean loginVerfify(String platForm,String openId,String token){ try{ String loginUrl = ""; if("1".equals(platForm)){ loginUrl = KTSDKConstans.androidVerify; }else if("2".equals(platForm)){ loginUrl = KTSDKConstans.iosVerify; } Map params = new HashMap(); params.put("userid", openId); params.put("token", token); StringBuilder sb = new StringBuilder(); sb.append("userid=").append(openId) .append("token=").append(token).append(KTSDKConstans.appid).append(KTSDKConstans.appkey); String sign = EncryptUtils.createMD5String(sb.toString()); params.put("sign", sign); params.put("appid", KTSDKConstans.appid); String loginResult = HttpUtils.doPost(loginUrl,params); if(loginResult == null || loginResult.isEmpty()){ return false; } return parseLoginResult(loginResult); }catch(Exception e){ return false; } } public static boolean loginVerfifyByTestLan(String openId,String token) throws Exception { String tokenInRedis = BaseGlobal.getInstance().redisApp.get(RedisKey.LOGIN_TOKEN, openId, String.class, -1); return token.equals(tokenInRedis); } private static boolean parseLoginResult(String orderResult){ try { JSONObject jsonObject = JSONObject.parseObject(orderResult); int state = jsonObject.getIntValue("state"); if(state != 1){ return false; } } catch (Exception e) { e.printStackTrace(); } return true; } }