From 43d91cecb4bce42a2abb3f2addef32b482359f8b Mon Sep 17 00:00:00 2001 From: Sola Date: Thu, 5 Nov 2015 15:28:51 +0800 Subject: [PATCH] Initial Commit --- .gitignore | 9 ++ lib/slf4j-simple-1.7.12.jar | Bin 0 -> 10712 bytes src/love/sola/netsupport/Index.java | 35 ++++++ src/love/sola/netsupport/api/GetUser.java | 48 +++++++++ src/love/sola/netsupport/enums/ISPType.java | 56 ++++++++++ src/love/sola/netsupport/pojo/User.java | 24 +++++ src/love/sola/netsupport/sql/SQLQuery.java | 63 +++++++++++ .../sola/netsupport/wechat/WxMpServlet.java | 102 ++++++++++++++++++ .../wechat/handler/HandlerList.java | 10 ++ .../wechat/handler/RegisterHandler.java | 27 +++++ .../intercepter/CheckSpamIntercepter.java | 35 ++++++ web/WEB-INF/web.xml | 80 ++++++++++++++ 12 files changed, 489 insertions(+) create mode 100644 .gitignore create mode 100644 lib/slf4j-simple-1.7.12.jar create mode 100644 src/love/sola/netsupport/Index.java create mode 100644 src/love/sola/netsupport/api/GetUser.java create mode 100644 src/love/sola/netsupport/enums/ISPType.java create mode 100644 src/love/sola/netsupport/pojo/User.java create mode 100644 src/love/sola/netsupport/sql/SQLQuery.java create mode 100644 src/love/sola/netsupport/wechat/WxMpServlet.java create mode 100644 src/love/sola/netsupport/wechat/handler/HandlerList.java create mode 100644 src/love/sola/netsupport/wechat/handler/RegisterHandler.java create mode 100644 src/love/sola/netsupport/wechat/intercepter/CheckSpamIntercepter.java create mode 100644 web/WEB-INF/web.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a7790e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.idea/ +out/ +/.metadata/ +/web/META-INF/context.xml +*.iml +~* +.DS_Store +.classpath +.project \ No newline at end of file diff --git a/lib/slf4j-simple-1.7.12.jar b/lib/slf4j-simple-1.7.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..354a78e2bceac27f63a7c86b6b80eea86d5f0bac GIT binary patch literal 10712 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 literal 0 HcmV?d00001 diff --git a/src/love/sola/netsupport/Index.java b/src/love/sola/netsupport/Index.java new file mode 100644 index 0000000..a638353 --- /dev/null +++ b/src/love/sola/netsupport/Index.java @@ -0,0 +1,35 @@ +package love.sola.netsupport; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * *********************************************** + * Created by Sola on 2014/8/4. + * Don't modify this source without my agreement + * *********************************************** + */ +@WebServlet(name = "Index",urlPatterns = "/",loadOnStartup = 1) +public class Index extends HttpServlet { + + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.addHeader("Content-type", "text/plain;charset=utf-8"); + response.setCharacterEncoding("utf-8"); + PrintWriter out = response.getWriter(); + out.println("Wechat Ticket System (WTS) 0.1 Copyright 2015 Sola all rights reserved. | Commercial license for ZSC Network Support Department (ZSCNSD)."); + out.println("For any problem, Please contact loli@sola.love."); + out.close(); + } + +} diff --git a/src/love/sola/netsupport/api/GetUser.java b/src/love/sola/netsupport/api/GetUser.java new file mode 100644 index 0000000..86a75dd --- /dev/null +++ b/src/love/sola/netsupport/api/GetUser.java @@ -0,0 +1,48 @@ +package love.sola.netsupport.api; + +import com.google.gson.Gson; +import love.sola.netsupport.sql.SQLQuery; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * *********************************************** + * Created by Sola on 2014/8/20. + * Don't modify this source without my agreement + * *********************************************** + */ +@WebServlet(name = "GetUser",urlPatterns = "/api/getuser",loadOnStartup = 1) +public class GetUser extends HttpServlet { + + @Override + public void init(ServletConfig config) throws ServletException { + super.init(config); + } + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.addHeader("Content-type", "text/plain;charset=utf-8"); + response.setCharacterEncoding("utf-8"); + PrintWriter out = response.getWriter(); + String name = request.getParameter("name"); + if (name == null) { + out.println("Username required."); + } else { + Gson gson = new Gson(); + out.println(gson.toJson(SQLQuery.getUserFromName(name))); + } + out.close(); + } + +} diff --git a/src/love/sola/netsupport/enums/ISPType.java b/src/love/sola/netsupport/enums/ISPType.java new file mode 100644 index 0000000..bf64ea5 --- /dev/null +++ b/src/love/sola/netsupport/enums/ISPType.java @@ -0,0 +1,56 @@ +package love.sola.netsupport.enums; + +import java.util.HashMap; +import java.util.Map; + +/** + * *********************************************** + * Created by Sola on 2014/8/20. + * Don't modify this source without my agreement + * *********************************************** + */ +public enum ISPType { + + + TELECOM("Telecom", 1), + UNICOM("Unicom", 2), + CHINAMOBILE("ChinaMobile", 3),; + + private static final Map NAME_MAP = new HashMap<>(); + private static final Map ID_MAP = new HashMap<>(); + + static { + for (ISPType type : values()) { + if (type.name != null) { + NAME_MAP.put(type.name.toLowerCase(), type); + } + if (type.id > 0) { + ID_MAP.put(type.id, type); + } + } + } + + public final String name; + public final int id; + + ISPType(String name, int id) { + this.name = name; + this.id = id; + } + + public static ISPType fromName(String name) { + if (name == null) { + return null; + } + return NAME_MAP.get(name.toLowerCase()); + } + + public static ISPType fromId(int id) { + return ID_MAP.get(id); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/love/sola/netsupport/pojo/User.java b/src/love/sola/netsupport/pojo/User.java new file mode 100644 index 0000000..a711c0d --- /dev/null +++ b/src/love/sola/netsupport/pojo/User.java @@ -0,0 +1,24 @@ +package love.sola.netsupport.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import love.sola.netsupport.enums.ISPType; + +/** + * *********************************************** + * Created by Sola on 2014/8/20. + * Don't modify this source without my agreement + * *********************************************** + */ +@Data +@AllArgsConstructor +public class User { + + private final int id; + private final String name; + private final long studentId; + private String netAccount; + private ISPType isp; + private String wechatId; + +} diff --git a/src/love/sola/netsupport/sql/SQLQuery.java b/src/love/sola/netsupport/sql/SQLQuery.java new file mode 100644 index 0000000..daea6d2 --- /dev/null +++ b/src/love/sola/netsupport/sql/SQLQuery.java @@ -0,0 +1,63 @@ +package love.sola.netsupport.sql; + +import love.sola.netsupport.pojo.User; +import love.sola.netsupport.enums.ISPType; + +import javax.naming.InitialContext; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * *********************************************** + * Created by Sola on 2014/8/20. + * Don't modify this source without my agreement + * *********************************************** + */ +public class SQLQuery { + + public static final String COLUMN_ID = "id"; + public static final String COLUMN_NAME = "name"; + public static final String COLUMN_STUDENT_ID = "studentid"; + public static final String COLUMN_NET_ACCOUNT = "netaccount"; + public static final String COLUMN_ISP = "isp"; + public static final String COLUMN_WECHAT = "wechat"; + + public static DataSource ds; + + static { + try { + InitialContext ic = new InitialContext(); + ds = (DataSource) ic.lookup("java:comp/env/jdbc/netsupport"); + ds.setLoginTimeout(3); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static User getUserFromName(String name) { + Connection conn = null; + try { + conn = ds.getConnection(); + PreparedStatement ps = conn.prepareStatement("SELECT * FROM user_info WHERE name=?"); + ps.setString(1, name); + ResultSet rs = ps.executeQuery(); + if (rs.next()) { + return new User(rs.getInt(COLUMN_ID), + rs.getString(COLUMN_NAME), + rs.getLong(COLUMN_STUDENT_ID), + rs.getString(COLUMN_NET_ACCOUNT), + ISPType.fromId(rs.getInt(COLUMN_ISP)), + rs.getString(COLUMN_WECHAT)); + } + } catch (SQLException e) { + } finally { + if (conn != null) try { conn.close(); } catch (SQLException e) { } + } + return null; + } + + +} diff --git a/src/love/sola/netsupport/wechat/WxMpServlet.java b/src/love/sola/netsupport/wechat/WxMpServlet.java new file mode 100644 index 0000000..d30ea90 --- /dev/null +++ b/src/love/sola/netsupport/wechat/WxMpServlet.java @@ -0,0 +1,102 @@ +package love.sola.netsupport.wechat; + +import love.sola.netsupport.wechat.handler.RegisterHandler; +import me.chanjar.weixin.common.util.StringUtils; +import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; +import me.chanjar.weixin.mp.api.WxMpMessageRouter; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.WxMpServiceImpl; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * *********************************************** + * Created by Sola on 2015/11/2. + * Don't modify this source without my agreement + * *********************************************** + */ +@WebServlet(name = "WxMpServlet", urlPatterns = "/wechattest", loadOnStartup = 2) +public class WxMpServlet extends HttpServlet { + + public static WxMpServlet instance; + protected WxMpInMemoryConfigStorage config; + protected WxMpService wxMpService; + protected WxMpMessageRouter wxMpMessageRouter; + + public WxMpServlet() { + instance = this; + } + + @Override + public void init() throws ServletException { + super.init(); + + config = new WxMpInMemoryConfigStorage(); + config.setAppId("*****"); + config.setSecret("*****"); + config.setToken("*****"); +// config.setAesKey("SolaAES"); + + wxMpService = new WxMpServiceImpl(); + wxMpService.setWxMpConfigStorage(config); + wxMpMessageRouter = new WxMpMessageRouter(wxMpService); + wxMpMessageRouter.rule().async(false).rContent("^").handler(new RegisterHandler()).end(); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + response.setContentType("text/html;charset=utf-8"); + response.setStatus(HttpServletResponse.SC_OK); + + String signature = request.getParameter("signature"); + String nonce = request.getParameter("nonce"); + String timestamp = request.getParameter("timestamp"); + + if (!wxMpService.checkSignature(timestamp, nonce, signature)) { + // Signature fail + response.getWriter().println("Access Denied"); + return; + } + + String echostr = request.getParameter("echostr"); + if (StringUtils.isNotBlank(echostr)) { + // validate request + response.getWriter().println(echostr); + return; + } + + String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw" : request.getParameter("encrypt_type"); + + if ("raw".equals(encryptType)) { + WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream()); + WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); + response.getWriter().write(outMessage.toXml()); + return; + } + + if ("aes".equals(encryptType)) { + String msgSignature = request.getParameter("msg_signature"); + WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), config, timestamp, nonce, msgSignature); + WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage); + response.getWriter().write(outMessage.toEncryptedXml(config)); + return; + } + + response.getWriter().println("Unknown encrypt-type"); + return; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + doPost(req, resp); + } +} diff --git a/src/love/sola/netsupport/wechat/handler/HandlerList.java b/src/love/sola/netsupport/wechat/handler/HandlerList.java new file mode 100644 index 0000000..eb07711 --- /dev/null +++ b/src/love/sola/netsupport/wechat/handler/HandlerList.java @@ -0,0 +1,10 @@ +package love.sola.netsupport.wechat.handler; + +/** + * *********************************************** + * Created by Sola on 2015/11/5. + * Don't modify this source without my agreement + * *********************************************** + */ +public class HandlerList { +} diff --git a/src/love/sola/netsupport/wechat/handler/RegisterHandler.java b/src/love/sola/netsupport/wechat/handler/RegisterHandler.java new file mode 100644 index 0000000..1e5de6f --- /dev/null +++ b/src/love/sola/netsupport/wechat/handler/RegisterHandler.java @@ -0,0 +1,27 @@ +package love.sola.netsupport.wechat.handler; + +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; + +import java.util.Map; + +/** + * *********************************************** + * Created by Sola on 2015/11/4. + * Don't modify this source without my agreement + * *********************************************** + */ +public class RegisterHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) + throws WxErrorException { + + return null; + } + +} diff --git a/src/love/sola/netsupport/wechat/intercepter/CheckSpamIntercepter.java b/src/love/sola/netsupport/wechat/intercepter/CheckSpamIntercepter.java new file mode 100644 index 0000000..014bac3 --- /dev/null +++ b/src/love/sola/netsupport/wechat/intercepter/CheckSpamIntercepter.java @@ -0,0 +1,35 @@ +package love.sola.netsupport.wechat.intercepter; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageInterceptor; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; + +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * *********************************************** + * Created by Sola on 2015/11/4. + * Don't modify this source without my agreement + * *********************************************** + */ +public class CheckSpamIntercepter implements WxMpMessageInterceptor { + + private static Cache cache = CacheBuilder.newBuilder() + .concurrencyLevel(4) + .weakKeys() + .maximumSize(10000) + .expireAfterWrite(10, TimeUnit.MINUTES) + .build(); + + @Override + public boolean intercept(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { + + return false; + } + +} diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml new file mode 100644 index 0000000..11e1fee --- /dev/null +++ b/web/WEB-INF/web.xml @@ -0,0 +1,80 @@ + + + + + + Network Support Application + + If you have any problem, please contact loli@sola.love . + + + + + + + + + + + + + 30 + + + \ No newline at end of file