From c7577dd4d3f071bff1a5dbbe84d76004843a4b69 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Wed, 12 Aug 2020 14:33:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E5=A4=96=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/controller/GetUserController.java | 61 ++++--- .../ljsd/controller/GetUserHwController.java | 98 +++++++++++ .../java/com/ljsd/plat/AbstractMHTPlat.java | 75 ++++++++ src/main/java/com/ljsd/plat/MHTGPPlat.java | 33 ++++ .../java/com/ljsd/plat/MHTHyTestPlat.java | 33 ++++ src/main/java/com/ljsd/plat/MHTIOSPlat.java | 33 ++++ src/main/java/com/ljsd/plat/PlatProcess.java | 18 ++ src/main/java/com/ljsd/util/BaseGlobal.java | 47 ++++- .../java/com/ljsd/util/ClassLoaderHelper.java | 162 ++++++++++++++++++ src/main/webapp/WEB-INF/web.xml | 11 ++ 10 files changed, 546 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/ljsd/controller/GetUserHwController.java create mode 100644 src/main/java/com/ljsd/plat/AbstractMHTPlat.java create mode 100644 src/main/java/com/ljsd/plat/MHTGPPlat.java create mode 100644 src/main/java/com/ljsd/plat/MHTHyTestPlat.java create mode 100644 src/main/java/com/ljsd/plat/MHTIOSPlat.java create mode 100644 src/main/java/com/ljsd/plat/PlatProcess.java create mode 100644 src/main/java/com/ljsd/util/ClassLoaderHelper.java diff --git a/src/main/java/com/ljsd/controller/GetUserController.java b/src/main/java/com/ljsd/controller/GetUserController.java index caf8a6e..fffe98e 100644 --- a/src/main/java/com/ljsd/controller/GetUserController.java +++ b/src/main/java/com/ljsd/controller/GetUserController.java @@ -92,30 +92,9 @@ public class GetUserController extends HttpServlet { }*/ LOGGER.info("the opendId = {},token={},platform={}",openId,token,platform); try { - if(!KTSDKConstans.appsecret.equals(admin)){ - if(isTestLan==1){ //test - boolean result = loginVerfifyByTestLan(openId, token); - if(!result){ - response.sendError(400, "verify fail"); - LOGGER.error("test verify fail"); - return; - } - }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; - } - } + boolean vertify = vertify(response, request, admin, platform, pid, openId, token); + if(!vertify){ + return; } response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); @@ -159,6 +138,40 @@ public class GetUserController extends HttpServlet { } } + + 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"); + 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; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + return true; + } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); diff --git a/src/main/java/com/ljsd/controller/GetUserHwController.java b/src/main/java/com/ljsd/controller/GetUserHwController.java new file mode 100644 index 0000000..f2d3b48 --- /dev/null +++ b/src/main/java/com/ljsd/controller/GetUserHwController.java @@ -0,0 +1,98 @@ +package com.ljsd.controller; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.plat.PlatProcess; +import com.ljsd.redis.RedisKey; +import com.ljsd.util.BaseGlobal; +import com.ljsd.util.HttpUtils; +import com.ljsd.util.KTSDKConstans; +import com.ljsd.util.MHTSDKConstans; +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 GetUserHwController extends GetUserController { + private final static String _COLLECTION_NAME = "user_info"; + private static final Logger LOGGER = LoggerFactory.getLogger(GetUserHwController.class); + public static int isTestLan=0; + + public static void initLanState(){ + Properties properties = BaseGlobal.getInstance().properties; + isTestLan = Integer.parseInt(properties.getProperty("isTestLan")); + } + + public GetUserHwController() { + super(); + } + + public void destroy() { + super.destroy(); + } + + + @Override + 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"); + LOGGER.error("test verify fail"); + return false; + } + } else if (!"3".equals(platform)) {//正式 切不是pc + boolean result = false; + if(platform.equals("1")){ + String sub_channel = request.getParameter("sub_channel"); + if (sub_channel != null && !sub_channel.equals("")) { + PlatProcess hwios; + if (sub_channel.equals("1000")) { + hwios = BaseGlobal.getInstance().getHandlers("HWTEST"); + } else { + hwios = BaseGlobal.getInstance().getHandlers("HWGP"); + } + result = hwios.loginVerfify(pid, openId, token); + } + + }else if(platform.equals("2")){ + PlatProcess hwios = BaseGlobal.getInstance().getHandlers("HWIOS"); + result = hwios.loginVerfify(pid, openId, token); + } + + if (!result) { + response.sendError(400, "verify fail"); + LOGGER.error("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 void main(String[] args) { +// boolean mht = loginVerfify("MHT", "2318137", "be385683efe228aadac0c8b5822a6fba"); + } + +} diff --git a/src/main/java/com/ljsd/plat/AbstractMHTPlat.java b/src/main/java/com/ljsd/plat/AbstractMHTPlat.java new file mode 100644 index 0000000..6926094 --- /dev/null +++ b/src/main/java/com/ljsd/plat/AbstractMHTPlat.java @@ -0,0 +1,75 @@ +package com.ljsd.plat; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.util.HttpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/8/10 16:35 + */ +public abstract class AbstractMHTPlat implements PlatProcess { + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMHTPlat.class); + private String happid; + private String appkey; + private String name; + private String loginVertifyUrl; + public AbstractMHTPlat() { + init(); + loginVertifyUrl = " http://interface.18183g.top/interface/user-login/checkLogin"; + } + + @Override + public void init() { + + } + + public String getVertifyUrl() { + return loginVertifyUrl; + } + + @Override + public boolean loginVerfify(String channelName, String openId, String token) { + try{ + String loginUrl =getVertifyUrl(); + Map params = new HashMap(); + params.put("sid", token); + params.put("appId", getAppkey()); + params.put("channelId", "MHT"); + String loginResult = HttpUtils.doPost(loginUrl,params); + if(loginResult == null || loginResult.isEmpty()){ + return false; + } + return parseLoginResult(loginResult); + }catch(Exception e){ + return false; + } + } + + public String getAppkey() { + return appkey; + } + + + 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; + } + + +} diff --git a/src/main/java/com/ljsd/plat/MHTGPPlat.java b/src/main/java/com/ljsd/plat/MHTGPPlat.java new file mode 100644 index 0000000..85bd116 --- /dev/null +++ b/src/main/java/com/ljsd/plat/MHTGPPlat.java @@ -0,0 +1,33 @@ +package com.ljsd.plat; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.util.HttpUtils; +import com.ljsd.util.MHTSDKConstans; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/8/10 16:35 + */ +public class MHTGPPlat extends AbstractMHTPlat { + private static final Logger LOGGER = LoggerFactory.getLogger(MHTGPPlat.class); + private String rhappid; + private String appkey; + + @Override + public String getName() { + return "HWGP"; + } + + @Override + public void init() { + rhappid = "346450436349889"; + appkey = "02c13b5e54da94aef0150db87b9862bb"; + } + +} diff --git a/src/main/java/com/ljsd/plat/MHTHyTestPlat.java b/src/main/java/com/ljsd/plat/MHTHyTestPlat.java new file mode 100644 index 0000000..784e1f7 --- /dev/null +++ b/src/main/java/com/ljsd/plat/MHTHyTestPlat.java @@ -0,0 +1,33 @@ +package com.ljsd.plat; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.util.HttpUtils; +import com.ljsd.util.MHTSDKConstans; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/8/10 16:35 + */ +public class MHTHyTestPlat extends AbstractMHTPlat { + private static final Logger LOGGER = LoggerFactory.getLogger(MHTHyTestPlat.class); + private String rhappid; + private String appkey; + + @Override + public String getName() { + return "HWTEST"; + } + + @Override + public void init() { + rhappid = "3192205470869872"; + appkey = "2c2ab86233c7266e9360b69506734b3f"; + } + +} diff --git a/src/main/java/com/ljsd/plat/MHTIOSPlat.java b/src/main/java/com/ljsd/plat/MHTIOSPlat.java new file mode 100644 index 0000000..90010e4 --- /dev/null +++ b/src/main/java/com/ljsd/plat/MHTIOSPlat.java @@ -0,0 +1,33 @@ +package com.ljsd.plat; + +import com.alibaba.fastjson.JSONObject; +import com.ljsd.util.HttpUtils; +import com.ljsd.util.MHTSDKConstans; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/8/10 16:35 + */ +public class MHTIOSPlat extends AbstractMHTPlat { + private static final Logger LOGGER = LoggerFactory.getLogger(MHTIOSPlat.class); + private String rhappid; + private String appkey; + + @Override + public String getName() { + return "HWIOS"; + } + + @Override + public void init() { + rhappid = "346450436349889"; + appkey = "98ea7849bb70a99025dfc58b5f57762b"; + } + +} diff --git a/src/main/java/com/ljsd/plat/PlatProcess.java b/src/main/java/com/ljsd/plat/PlatProcess.java new file mode 100644 index 0000000..fa3da96 --- /dev/null +++ b/src/main/java/com/ljsd/plat/PlatProcess.java @@ -0,0 +1,18 @@ +package com.ljsd.plat; + +/** + * Description: des + * Author: zsx + * CreateDate: 2020/8/10 15:59 + */ +public interface PlatProcess { + + void init(); + + String getName(); + + boolean loginVerfify(String channelName, String openId, String token); + + String getVertifyUrl(); + +} \ No newline at end of file diff --git a/src/main/java/com/ljsd/util/BaseGlobal.java b/src/main/java/com/ljsd/util/BaseGlobal.java index 42d56af..87854bb 100644 --- a/src/main/java/com/ljsd/util/BaseGlobal.java +++ b/src/main/java/com/ljsd/util/BaseGlobal.java @@ -1,14 +1,16 @@ package com.ljsd.util; import com.ljsd.controller.GetUserController; +import com.ljsd.plat.PlatProcess; import com.ljsd.redis.RedisApp; -import java.util.Properties; +import java.util.*; public class BaseGlobal { public Properties properties = new Properties(); public MyMongoDBPool mongoDBPool; public RedisApp redisApp; + private Map handlers = new HashMap<>(); private BaseGlobal() { } @@ -29,6 +31,49 @@ public class BaseGlobal { public void init() { mongoDBPool = new MyMongoDBPool(); redisApp = new RedisApp(); + initHandler("com.ljsd.plat"); GetUserController.initLanState(); } + + + public void initHandler(String pck) { + List> handlers = new LinkedList<>(); + try { + try { + ClassLoaderHelper.findLocalClass(pck, PlatProcess.class, Thread.currentThread().getContextClassLoader(), handlers); + } catch (RuntimeException e) { + + } + try { + ClassLoaderHelper.findClassJar(pck, PlatProcess.class, Thread.currentThread().getContextClassLoader(), handlers); + } catch (RuntimeException e) { + + } + + handlers.forEach(hand -> + { + PlatProcess baseHandler = null; + + try { + baseHandler = (PlatProcess) hand.newInstance(); + } catch (Exception ex) { + ex.printStackTrace(); + } + if (null != baseHandler) { + addHandler(baseHandler); + } + }); + } catch (RuntimeException e2) { + } + } + + private void addHandler(PlatProcess handler) { + if(null!=handler.getName()){ + handlers.put(handler.getName(), handler); + } + } + + public PlatProcess getHandlers(String name) { + return handlers.get(name); + } } diff --git a/src/main/java/com/ljsd/util/ClassLoaderHelper.java b/src/main/java/com/ljsd/util/ClassLoaderHelper.java new file mode 100644 index 0000000..55906fb --- /dev/null +++ b/src/main/java/com/ljsd/util/ClassLoaderHelper.java @@ -0,0 +1,162 @@ +package com.ljsd.util; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Modifier; +import java.net.JarURLConnection; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Enumeration; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +/** + * Description: des + * Author: zsx + * CreateDate: 2019/10/8 17:23 + */ +public class ClassLoaderHelper { + + final static ConcurrentHashMap> CLS_CACHE = new ConcurrentHashMap<>(); + + public static Class forName(String clsname) throws ClassNotFoundException{ + Class cls = CLS_CACHE.get(clsname); + if(null == cls){ + cls = Class.forName(clsname); + CLS_CACHE.put(clsname, cls); + } + return cls; + } + + /** + * 获取指定接口的某个包下的所有实现类(不包括接口和抽象类) + */ + public static void findLocalClass(String packName, Class classinterface, ClassLoader classLoader, List> classes) + { + URI url; + try + { + url = classLoader.getResource(packName.replace(".", "/")).toURI(); + } + catch(URISyntaxException e1) + { + return; + } + File file = new File(url); + file.listFiles((subfile) -> + { + if(subfile.isDirectory()) + { + findLocalClass(packName + "." + subfile.getName(), classinterface,classLoader,classes); + } + if(subfile.getName().endsWith(".class")) + { + Class clazz = null; + try + { + String classname = packName + "." + subfile.getName().replace(".class", ""); + clazz = classLoader.loadClass(classname); + } + catch(ClassNotFoundException e) + { + e.printStackTrace(); + } + if(clazz == null) + { + return false; + } + + if(ClassLoaderHelper.filter(clazz, classinterface)) + { + classes.add(clazz); + return true; + } + } + return false; + }); + } + + /** + * 过滤接口和抽象类 + */ + public static boolean filter(Class clazz, Class filterclass) + { + if(clazz.isInterface()) + { + return false; + } + if(Modifier.isAbstract(clazz.getModifiers())) + { + return false; + } + return filterclass.isAssignableFrom(clazz); + } + + + /** + * jar包查找 + */ + public static void findClassJar(final String packName, Class classinterface, ClassLoader classLoader, List> classes) + { + String pathName = packName.replace(".", "/"); + JarFile jarFile; + try + { + URL url = classLoader.getResource(pathName); + JarURLConnection jarURLConnection = (JarURLConnection)url.openConnection(); + jarFile = jarURLConnection.getJarFile(); + } + catch(IOException |NullPointerException e) + { + return; + } + + Enumeration jarEntries = jarFile.entries(); + while(jarEntries.hasMoreElements()) + { + JarEntry jarEntry = jarEntries.nextElement(); + String jarEntryName = jarEntry.getName(); + if(jarEntryName.contains(pathName) && !jarEntryName.equals(pathName + "/")) + { + if(jarEntry.isDirectory()) + { + String clazzName = jarEntry.getName().replace("/", "."); + int endIndex = clazzName.lastIndexOf("."); + String prefix = null; + if(endIndex > 0) + { + prefix = clazzName.substring(0, endIndex); + } + findClassJar(prefix, classinterface,classLoader,classes); + } + if(jarEntry.getName().endsWith(".class")) + { + Class clazz = null; + try + { + clazz = classLoader.loadClass(jarEntry.getName().replace("/", ".").replace(".class", "")); + } + catch(ClassNotFoundException e) + { + e.printStackTrace(); + } + if(clazz == null) + { + return; + } + if(filter(clazz, classinterface)) + { + classes.add(clazz); + } + } + } + + } + + } + + +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index f3b58f5..7b27785 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -80,6 +80,17 @@ /getUserInfo + + getHwUserInfo + com.ljsd.controller.GetUserHwController + + + + getHwUserInfo + /getHwUserInfo + + + registerUser com.ljsd.controller.UserRegisterController