diff --git a/src/main/java/com/ljsd/controller/GetServerVersionController.java b/src/main/java/com/ljsd/controller/GetServerVersionController.java new file mode 100644 index 0000000..6939c8f --- /dev/null +++ b/src/main/java/com/ljsd/controller/GetServerVersionController.java @@ -0,0 +1,52 @@ +package com.ljsd.controller; + +import com.ljsd.util.BaseGlobal; +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; + +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; + +/** + * @author lvxinran + * @date 2021/6/22 + * @discribe + */ +public class GetServerVersionController extends HttpServlet { + private final static String COLLECTION_NAME = "hand_in"; + + public GetServerVersionController() { + } + + @Override + public void destroy() { + super.destroy(); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String serverVersion = req.getParameter("serverVersion"); + DBObject dbObject = new BasicDBObject(); + dbObject.put("openId", serverVersion); + try { + DBObject info = BaseGlobal.getInstance().mongoDBPool.findOne(COLLECTION_NAME,serverVersion ); + PrintWriter out = resp.getWriter(); + out.print(info); + out.flush(); + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + super.doGet(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doPost(req, resp); + } +} diff --git a/src/main/java/com/ljsd/controller/GetUserController.java b/src/main/java/com/ljsd/controller/GetUserController.java index 891c99c..0146c27 100644 --- a/src/main/java/com/ljsd/controller/GetUserController.java +++ b/src/main/java/com/ljsd/controller/GetUserController.java @@ -1,6 +1,7 @@ package com.ljsd.controller; import com.ljsd.redis.RedisKey; +import com.ljsd.service.CaohuaVerifyService; import com.ljsd.service.LdVerifyService; import com.ljsd.service.VerifyService; import com.ljsd.service.XPVerifyService; @@ -15,8 +16,7 @@ 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.io.*; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,6 +31,7 @@ public class GetUserController extends HttpServlet { //初始化所有需要的验证方式 serviceMap.put("MHT", new LdVerifyService("MHT")); serviceMap.put("XP", new XPVerifyService("XP")); + serviceMap.put("CH",new CaohuaVerifyService("CH"));//草花 } @@ -143,17 +144,17 @@ public class GetUserController extends HttpServlet { if(server_info.size()==0){ returnErrorToFront(res,response,"服务器信息获取错误"); return; - }else{ + } + + int uid = 0; + List userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject); + if (userInfos.size() == 0) { DBObject next = server_info.iterator().next(); Object register_state = next.get("register_state"); if(register_state!=null&& register_state.equals("0")){ returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏"); return; } - } - int uid = 0; - List userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject); - if (userInfos.size() == 0) { uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000; dbObject.put("uid", uid); dbObject.put("_id", uid); @@ -197,6 +198,7 @@ public class GetUserController extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); + } // public static boolean loginVerfifyShangwu(String channelName,String openId,String token,String appId){ diff --git a/src/main/java/com/ljsd/pojo/VerifyParams.java b/src/main/java/com/ljsd/pojo/VerifyParams.java index b7f0817..f8cea35 100644 --- a/src/main/java/com/ljsd/pojo/VerifyParams.java +++ b/src/main/java/com/ljsd/pojo/VerifyParams.java @@ -21,6 +21,12 @@ public class VerifyParams { private String openId; private String productCode; + + private String extraData; + + private String platformAppid; + + private String platformId; public String getChannel() { return channel; @@ -86,4 +92,27 @@ public class VerifyParams { this.productCode = productCode; } + public String getExtraData() { + return extraData; + } + + public void setExtraData(String extraData) { + this.extraData = extraData; + } + + public String getPlatformAppid() { + return platformAppid; + } + + public void setPlatformAppid(String platformAppid) { + this.platformAppid = platformAppid; + } + + public String getPlatformId() { + return platformId; + } + + public void setPlatformId(String platformId) { + this.platformId = platformId; + } } diff --git a/src/main/java/com/ljsd/service/AbstractVerifyService.java b/src/main/java/com/ljsd/service/AbstractVerifyService.java index d016bd9..334b5bb 100644 --- a/src/main/java/com/ljsd/service/AbstractVerifyService.java +++ b/src/main/java/com/ljsd/service/AbstractVerifyService.java @@ -23,6 +23,11 @@ public abstract class AbstractVerifyService implements VerifyService { protected Properties properties; public static int isTestLan=0; + //草花参数 + public static String caohua_login_url; + public static String caohua_app_id; + public static String caohua_secret_key; + private String sign; @@ -30,6 +35,9 @@ public abstract class AbstractVerifyService implements VerifyService { this.sign = sign; properties = BaseGlobal.getInstance().properties; isTestLan = Integer.parseInt(properties.getProperty("isTestLan")); + caohua_login_url = properties.getProperty("caohua_login_url"); + caohua_app_id = properties.getProperty("caohua_app_id"); + caohua_secret_key = properties.getProperty("caohua_secret_key"); } @Override @@ -60,7 +68,7 @@ public abstract class AbstractVerifyService implements VerifyService { result = verifyTest(testParam); } else if(sub_channel.equals("20201222")){ //商务服 - //result = loginVerfifyShangwu("MHT", openId, token, MHTSDKConstans.rhappIdshangwu); + result = true; } else { //正式服appId VerifyParams params = new VerifyParams(); diff --git a/src/main/java/com/ljsd/service/CaohuaVerifyService.java b/src/main/java/com/ljsd/service/CaohuaVerifyService.java new file mode 100644 index 0000000..3b97d2f --- /dev/null +++ b/src/main/java/com/ljsd/service/CaohuaVerifyService.java @@ -0,0 +1,142 @@ +package com.ljsd.service; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.pojo.VerifyParams; +import com.ljsd.util.HttpUtils; +import com.ljsd.util.MD5Util; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author xuexinpeng + * @date 2021/6/7 + * @discribe 草花登录验证 + */ +public class CaohuaVerifyService extends AbstractVerifyService { + private static final Logger LOGGER = LoggerFactory.getLogger(CaohuaVerifyService.class); + + + public CaohuaVerifyService(String sign) { + super(sign); + } + + private static String getParamString(Map param) { + + StringBuilder builder = new StringBuilder(); + param.forEach((k, v) -> { + if (builder.length() > 0) { + builder.append("&"); + } + builder.append(k).append("=").append(v); + }); + return builder.toString(); + } + + + 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; + } + + /** + * 构建签名 + * sign=md5hex(app_id=265&ext_data={}&platform_appid=0&platform_id=5186318E52F5ED4801ABE1D13D509443DE) + * + * @return + */ + private static String getSign(String app_id,String ext_data, String platform_appid, String platform_id,String appkey) { + return MD5Util.encrypByMd5("app_id="+app_id+"&ext_data="+ext_data+"&platform_appid="+platform_appid+"&platform_id="+platform_id+appkey); + } + + //String channel, String openId, String token ,String appId,String secretKey + boolean doVerify(VerifyParams verifyParams) { + try { + //String login_url ="https://data-msdk.caohua.com/login/verifyAccount"; + Map params = new HashMap<>(); + params.put("app_id",verifyParams.getAppId()); + params.put("platform_id",verifyParams.getPlatformId()); + params.put("platform_appid",verifyParams.getPlatformAppid()); + params.put("ext_data",verifyParams.getExtraData()); + String sign = getSign(verifyParams.getAppId(),verifyParams.getExtraData(),verifyParams.getPlatformAppid(),verifyParams.getPlatformId(),verifyParams.getSecretKey()); + params.put("sign",sign); + LOGGER.info("loginParam : "+params.toString()); + String loginResult = HttpUtils.doPost(caohua_login_url, params); + LOGGER.info("loginResult=>{}", loginResult); + if (loginResult == null || loginResult.isEmpty()) { + return false; + } + return parseLoginResult(loginResult); + } catch (Exception e) { + return false; + } + } + + @Override + public boolean verifyTest(VerifyParams params) { + + return doVerify(params); + } + + @Override + public boolean verifyFormat(VerifyParams params) { + + return doVerify(params); + } + + @Override + protected VerifyParams getTestParam(VerifyParams params, HttpServletRequest request, String openId, String token) { + return getMHTParam(params, token); + } + + @Override + protected VerifyParams getFormatParam(VerifyParams params, HttpServletRequest request, String openId, String token) { + String platformId = request.getParameter("pid"); + String platformAppid = request.getParameter("platform_appid"); + String ext_data = request.getParameter("ext_data"); + String sign = request.getParameter("sign"); + //params.setAppId("1135"); + params.setAppId(caohua_app_id); + params.setPlatformId(platformId); + params.setPlatformAppid(platformAppid); + params.setExtraData(ext_data); + //params.setSecretKey("2d74a35892ca1f4f8070bd6afe796cd9"); + params.setSecretKey(caohua_secret_key); + params.setParamSign(sign); + return params; + } + + private VerifyParams getMHTParam(VerifyParams params, String token) { + params.setChannel("MHT"); + params.setToken(token); + return params; + } + +// public static void main(String[] args) { +// //String paramSign = "d53b3e8ef74bf72d8aafce3a1c8671a0" ; +// //String secretKey = ""; +// //String timeStamp = "0"; +// //String openId = "1238"; +// //String verifyStr = openId+"&"+timeStamp+"&"+secretKey; +// String verifyStr = "app_id=265&ext_data={}&platform_appid=0&platform_id=5186318E52F5ED4801ABE1D13D509443DE"; +// //String s //= MD5Util.encrypByMd5(verifyStr);// 111ceafc44a97b3fa877012abb43f689 +// String s =getSign("265","{}","0","51","86318E52F5ED4801ABE1D13D509443DE"); +// System.err.println(s.equals("111ceafc44a97b3fa877012abb43f689")); +// +// } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94fca33..41fbf77 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,4 +27,12 @@ redis_maxWaitMillis = 20 redis_maxIdle = 5 redis_testOnBorrow = false -isTestLan = 1 \ No newline at end of file +isTestLan = 0 + +#草花SDK +caohua_login_url = https://data-msdk.caohua.com/login/verifyAccount +caohua_app_id = 1135 +caohua_secret_key = 2d74a35892ca1f4f8070bd6afe796cd9 + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index d3995c5..33f9ce9 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -131,6 +131,16 @@ /excelData + + getServerVersion + com.ljsd.controller.GetServerVersionController + + + + getServerVersion + /getServerVersion + + com.ljsd.listener.WebContextListener