| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- package com.ljsd.controller;
- import com.alibaba.fastjson.JSONObject;
- import com.ljsd.redis.RedisKey;
- import com.ljsd.util.*;
- 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.text.DateFormat;
- import java.text.SimpleDateFormat;
- 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();
- }
- /**
- * openId 账号id
- * version
- * serverId
- * token
- * platform android、ios 3 跳过验证
- * admin
- * gid pid
- *
- *
- *---verty--
- * openid 和token校验
- *
- * ---return--
- *
- * uid(openid + serverid + platid)
- *
- */
- 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;
- }
- String version = request.getParameter("version");
- if (version == null) {
- version="未知版本号";
- }
- LOGGER.info("the opendId = {},isTestLan={},version{}",openId,isTestLan,version);
- 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;
- }
- String admin = request.getParameter("admin"); //平台类型
- String gid = request.getParameter("gid"); //gid
- String pid = request.getParameter("pid"); //pid
- /*if (StringUtils.checkIsEmpty(admin)) {
- response.sendError(400, "platform is empety");
- return;
- }*/
- LOGGER.info("the opendId = {},token={},platform={}",openId,token,platform);
- try {
- boolean vertify = vertify(response, request, admin, platform, pid, openId, token);
- if(!vertify){
- 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<DBObject> 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);
- if (gid != null && !gid.isEmpty()) {
- dbObject.put("gid", gid);
- }
- if (pid != null && !pid.isEmpty()) {
- dbObject.put("pid", pid);
- }
- BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
- //记录日志,为了数据后台
- logRegister(openId,uid,serverId);
- }
- 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), utoken, -1, false);
- BaseGlobal.getInstance().redisApp.set(RedisKey.PIDGIDTEMP, String.valueOf(uid), pid+"#"+gid, -1, false);
- //记录日志,为了数据后台
- logLogin(openId,uid,serverId);
- PrintWriter out = response.getWriter();
- out.print(res);
- out.flush();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //注册 用户id,角色id,serverid,时间 放到一个表里
- private void logRegister(String openId,int uid,String serverId){
- Date date = new Date();
- long loginTime = date.getTime();
- DBObject doc = new BasicDBObject();
- DBObject doc1 = new BasicDBObject();
- //doc.put("_id",);
- doc1.put("openId",openId);
- doc1.put("uid",uid);
- doc1.put("serverId",serverId);
- doc1.put("registerTime",loginTime);
- doc.put("register",doc1);
- BaseGlobal.getInstance().mongoDBPool.save("logRegister", doc);
- }
- //登录 用户id,角色id,serverid,时间 按天放到一个表里
- private void logLogin(String openId,int uid,String serverId){
- //DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
- Date date = new Date();
- //long loginTime = Long.parseLong(dateFormat.format(date));
- long loginTime = date.getTime();
- DBObject doc = new BasicDBObject();
- DBObject doc1 = new BasicDBObject();
- //doc.put("_id",);
- doc1.put("openId",openId);
- doc1.put("uid",uid);
- doc1.put("serverId",serverId);
- doc1.put("loginTime",loginTime);
- doc.put("loginTime",doc1);
- BaseGlobal.getInstance().mongoDBPool.save("logLogin", doc);
- }
- public boolean vertify(HttpServletResponse response,HttpServletRequest request,String admin,String platform,String pid,String openId,String token){
- try {
- if(!KTSDKConstans.appsecret.equals(admin)) {
- if (isTestLan == 1) { //test
- boolean result = loginVerfifyByTestLan(openId, token);
- if (!result) {
- //response.sendError(400, "verify fail");
- PrintWriter out = response.getWriter();
- out.print("fail");//认证失败
- out.flush();
- out.close();
- LOGGER.error("test verify fail");
- return false;
- }
- } else if (!"3".equals(platform)) {//正式 切不是pc
- String sub_channel = request.getParameter("sub_channel");
- boolean result = false;
- if (sub_channel != null && !sub_channel.equals("")) {
- if (sub_channel.equals("1000")) {
- result = loginVerfify(pid, openId, token, MHTSDKConstans.rhappid);
- } else {
- result = loginVerfify(pid, openId, token, MHTSDKConstans.rhappidOnline);
- }
- }
- if (!result) {
- response.sendError(400, "verify fail");
- LOGGER.error("verify fail");
- return false;
- }
- }
- }else {
- boolean result = loginVerfifyByTestLan(openId, token);
- if (!result) {
- //response.sendError(400, "verify fail");
- PrintWriter out = response.getWriter();
- out.print("fail");//认证失败
- out.flush();
- out.close();
- LOGGER.error("test verify fail");
- return false;
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- return true;
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doGet(request, response);
- }
- public static boolean loginVerfify(String channelName,String openId,String token,String appId){
- try{
- String loginUrl = MHTSDKConstans.loginVerify;
- Map<String, String> params = new HashMap<String, String>();
- params.put("userToken", token);
- params.put("appId", appId);
- params.put("channelName", channelName);
- params.put("uid", openId);
- 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);
- LOGGER.info("tokenInRedis={}",tokenInRedis);
- return token.equals(tokenInRedis);
- }
- private static boolean parseLoginResult(String orderResult){
- try {
- JSONObject jsonObject = JSONObject.parseObject(orderResult);
- int state = jsonObject.getIntValue("code");
- if(state != 200){
- String content = jsonObject.getString("message");
- LOGGER.info("parseLoginResult content={}",content);
- return false;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return true;
- }
- public static void main(String[] args) {
- // boolean mht = loginVerfify("MHT", "2318137", "be385683efe228aadac0c8b5822a6fba");
- }
- }
|