GetUserController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package com.ljsd.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.ljsd.redis.RedisKey;
  4. import com.ljsd.util.*;
  5. import com.mongodb.BasicDBObject;
  6. import com.mongodb.DBObject;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.io.IOException;
  14. import java.io.PrintWriter;
  15. import java.text.DateFormat;
  16. import java.text.SimpleDateFormat;
  17. import java.util.*;
  18. public class GetUserController extends HttpServlet {
  19. private final static String _COLLECTION_NAME = "user_info";
  20. private static final Logger LOGGER = LoggerFactory.getLogger(GetUserController.class);
  21. public static int isTestLan=0;
  22. public static void initLanState(){
  23. Properties properties = BaseGlobal.getInstance().properties;
  24. isTestLan = Integer.parseInt(properties.getProperty("isTestLan"));
  25. }
  26. public GetUserController() {
  27. super();
  28. }
  29. public void destroy() {
  30. super.destroy();
  31. }
  32. /**
  33. * openId 账号id
  34. * version
  35. * serverId
  36. * token
  37. * platform android、ios 3 跳过验证
  38. * admin
  39. * gid pid
  40. *
  41. *
  42. *---verty--
  43. * openid 和token校验
  44. *
  45. * ---return--
  46. *
  47. * uid(openid + serverid + platid)
  48. *
  49. */
  50. public void doGet(HttpServletRequest request, HttpServletResponse response)
  51. throws ServletException, IOException {
  52. String openId = request.getParameter("openId");
  53. if (openId == null || openId.isEmpty()) {
  54. response.sendError(400, "openId is empety");
  55. return;
  56. }
  57. String version = request.getParameter("version");
  58. if (version == null) {
  59. version="未知版本号";
  60. }
  61. LOGGER.info("the opendId = {},isTestLan={},version{}",openId,isTestLan,version);
  62. String serverId = request.getParameter("serverId");
  63. if (serverId == null || serverId.isEmpty()) {
  64. response.sendError(400, "serverId is empety");
  65. return;
  66. }
  67. String token = request.getParameter("token");
  68. if (token == null || serverId.isEmpty()) {
  69. response.sendError(400, "token is empety");
  70. return;
  71. }
  72. String platform = request.getParameter("platform"); //平台类型
  73. if (platform == null || platform.isEmpty()) {
  74. response.sendError(400, "platform is empety");
  75. return;
  76. }
  77. String admin = request.getParameter("admin"); //平台类型
  78. String gid = request.getParameter("gid"); //gid
  79. String pid = request.getParameter("pid"); //pid
  80. /*if (StringUtils.checkIsEmpty(admin)) {
  81. response.sendError(400, "platform is empety");
  82. return;
  83. }*/
  84. LOGGER.info("the opendId = {},token={},platform={}",openId,token,platform);
  85. try {
  86. boolean vertify = vertify(response, request, admin, platform, pid, openId, token);
  87. if(!vertify){
  88. return;
  89. }
  90. response.setCharacterEncoding("UTF-8");
  91. response.setContentType("application/json; charset=utf-8");
  92. DBObject dbObject = new BasicDBObject();
  93. dbObject.put("openId", openId);
  94. dbObject.put("serverId", serverId);
  95. dbObject.put("platform", platform);
  96. int uid = 0;
  97. List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
  98. DBObject res = new BasicDBObject();
  99. if (userInfos.size() == 0) {
  100. uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000;
  101. dbObject.put("uid", uid);
  102. dbObject.put("_id", uid);
  103. userInfos.add(dbObject);
  104. if (gid != null && !gid.isEmpty()) {
  105. dbObject.put("gid", gid);
  106. }
  107. if (pid != null && !pid.isEmpty()) {
  108. dbObject.put("pid", pid);
  109. }
  110. BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
  111. //记录日志,为了数据后台
  112. logRegister(openId,uid,serverId);
  113. }
  114. Random random = new Random();
  115. int utoken = Math.abs(random.nextInt());
  116. uid = (int) userInfos.get(0).get("uid");
  117. res.put("uid", uid);
  118. res.put("token", utoken);
  119. BaseGlobal.getInstance().redisApp.set(RedisKey.TOKEN, String.valueOf(uid), utoken, -1, false);
  120. BaseGlobal.getInstance().redisApp.set(RedisKey.PIDGIDTEMP, String.valueOf(uid), pid+"#"+gid, -1, false);
  121. //记录日志,为了数据后台
  122. logLogin(openId,uid,serverId);
  123. PrintWriter out = response.getWriter();
  124. out.print(res);
  125. out.flush();
  126. out.close();
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. }
  130. }
  131. //注册 用户id,角色id,serverid,时间 放到一个表里
  132. private void logRegister(String openId,int uid,String serverId){
  133. Date date = new Date();
  134. long loginTime = date.getTime();
  135. DBObject doc = new BasicDBObject();
  136. DBObject doc1 = new BasicDBObject();
  137. //doc.put("_id",);
  138. doc1.put("openId",openId);
  139. doc1.put("uid",uid);
  140. doc1.put("serverId",serverId);
  141. doc1.put("registerTime",loginTime);
  142. doc.put("register",doc1);
  143. BaseGlobal.getInstance().mongoDBPool.save("logRegister", doc);
  144. }
  145. //登录 用户id,角色id,serverid,时间 按天放到一个表里
  146. private void logLogin(String openId,int uid,String serverId){
  147. //DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
  148. Date date = new Date();
  149. //long loginTime = Long.parseLong(dateFormat.format(date));
  150. long loginTime = date.getTime();
  151. DBObject doc = new BasicDBObject();
  152. DBObject doc1 = new BasicDBObject();
  153. //doc.put("_id",);
  154. doc1.put("openId",openId);
  155. doc1.put("uid",uid);
  156. doc1.put("serverId",serverId);
  157. doc1.put("loginTime",loginTime);
  158. doc.put("loginTime",doc1);
  159. BaseGlobal.getInstance().mongoDBPool.save("logLogin", doc);
  160. }
  161. public boolean vertify(HttpServletResponse response,HttpServletRequest request,String admin,String platform,String pid,String openId,String token){
  162. try {
  163. if(!KTSDKConstans.appsecret.equals(admin)) {
  164. if (isTestLan == 1) { //test
  165. boolean result = loginVerfifyByTestLan(openId, token);
  166. if (!result) {
  167. //response.sendError(400, "verify fail");
  168. PrintWriter out = response.getWriter();
  169. out.print("fail");//认证失败
  170. out.flush();
  171. out.close();
  172. LOGGER.error("test verify fail");
  173. return false;
  174. }
  175. } else if (!"3".equals(platform)) {//正式 切不是pc
  176. String sub_channel = request.getParameter("sub_channel");
  177. boolean result = false;
  178. if (sub_channel != null && !sub_channel.equals("")) {
  179. if (sub_channel.equals("1000")) {
  180. result = loginVerfify(pid, openId, token, MHTSDKConstans.rhappid);
  181. } else {
  182. result = loginVerfify(pid, openId, token, MHTSDKConstans.rhappidOnline);
  183. }
  184. }
  185. if (!result) {
  186. response.sendError(400, "verify fail");
  187. LOGGER.error("verify fail");
  188. return false;
  189. }
  190. }
  191. }else {
  192. boolean result = loginVerfifyByTestLan(openId, token);
  193. if (!result) {
  194. //response.sendError(400, "verify fail");
  195. PrintWriter out = response.getWriter();
  196. out.print("fail");//认证失败
  197. out.flush();
  198. out.close();
  199. LOGGER.error("test verify fail");
  200. return false;
  201. }
  202. }
  203. }catch (Exception e){
  204. e.printStackTrace();
  205. }
  206. return true;
  207. }
  208. public void doPost(HttpServletRequest request, HttpServletResponse response)
  209. throws ServletException, IOException {
  210. this.doGet(request, response);
  211. }
  212. public static boolean loginVerfify(String channelName,String openId,String token,String appId){
  213. try{
  214. String loginUrl = MHTSDKConstans.loginVerify;
  215. Map<String, String> params = new HashMap<String, String>();
  216. params.put("userToken", token);
  217. params.put("appId", appId);
  218. params.put("channelName", channelName);
  219. params.put("uid", openId);
  220. String loginResult = HttpUtils.doPost(loginUrl,params);
  221. if(loginResult == null || loginResult.isEmpty()){
  222. return false;
  223. }
  224. return parseLoginResult(loginResult);
  225. }catch(Exception e){
  226. return false;
  227. }
  228. }
  229. public static boolean loginVerfifyByTestLan(String openId,String token) throws Exception {
  230. String tokenInRedis = BaseGlobal.getInstance().redisApp.get(RedisKey.LOGIN_TOKEN, openId, String.class, -1);
  231. LOGGER.info("tokenInRedis={}",tokenInRedis);
  232. return token.equals(tokenInRedis);
  233. }
  234. private static boolean parseLoginResult(String orderResult){
  235. try {
  236. JSONObject jsonObject = JSONObject.parseObject(orderResult);
  237. int state = jsonObject.getIntValue("code");
  238. if(state != 200){
  239. String content = jsonObject.getString("message");
  240. LOGGER.info("parseLoginResult content={}",content);
  241. return false;
  242. }
  243. } catch (Exception e) {
  244. e.printStackTrace();
  245. }
  246. return true;
  247. }
  248. public static void main(String[] args) {
  249. // boolean mht = loginVerfify("MHT", "2318137", "be385683efe228aadac0c8b5822a6fba");
  250. }
  251. }