using maven build tools instead

This commit is contained in:
Sola
2015-11-13 17:33:58 +08:00
parent 2dd27b3524
commit 8959b33a04
17 changed files with 104 additions and 0 deletions

View File

@@ -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();
}
}

View File

@@ -0,0 +1,67 @@
package love.sola.netsupport.api;
import com.google.gson.Gson;
import love.sola.netsupport.enums.ResponseCode;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableUser;
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 {
private Gson gson = null;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
gson = new Gson();
}
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.setCharacterEncoding("utf-8");
response.addHeader("Content-type", "text/json;charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String name = request.getParameter("name");
if ((id == null || id.isEmpty()) && (name == null || name.isEmpty())) {
out.println(gson.toJson(new Response(ResponseCode.PARAMETER_REQUIRED)));
} else if (id != null) {
try {
User u = TableUser.getUserById(Integer.parseInt(id));
if (u == null)
out.println(gson.toJson(new Response(ResponseCode.USER_NOT_FOUND)));
else
out.println(gson.toJson(new Response(ResponseCode.OK, u)));
} catch (NumberFormatException e) {
out.println(gson.toJson(new Response(ResponseCode.ILLEGAL_PARAMETER)));
}
} else {
User u = TableUser.getUserByName(name);
if (u == null)
out.println(gson.toJson(new Response(ResponseCode.USER_NOT_FOUND)));
else
out.println(gson.toJson(new Response(ResponseCode.OK, u)));
}
out.close();
}
}

View File

@@ -0,0 +1,29 @@
package love.sola.netsupport.api;
import lombok.AllArgsConstructor;
import love.sola.netsupport.enums.ResponseCode;
/**
* ***********************************************
* Created by Sola on 2015/11/5.
* Don't modify this source without my agreement
* ***********************************************
*/
@AllArgsConstructor
public class Response {
public int code;
public String info;
public Object result;
public Response(ResponseCode code) {
this(code, null);
}
public Response(ResponseCode code, Object result) {
this.code = code.id;
this.info = code.info;
this.result = result;
}
}

View File

@@ -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<String, ISPType> NAME_MAP = new HashMap<>();
private static final Map<Integer, ISPType> 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;
}
}

View File

@@ -0,0 +1,47 @@
package love.sola.netsupport.enums;
import java.util.HashMap;
import java.util.Map;
/**
* ***********************************************
* Created by Sola on 2015/11/6.
* Don't modify this source without my agreement
* ***********************************************
*/
public enum ResponseCode {
OK(0, "OK"),
PARAMETER_REQUIRED(-1, "Parameter Required"),
ILLEGAL_PARAMETER(-2, "Illegal parameter"),
USER_NOT_FOUND(-11, "User not found"),
;
private static final Map<Integer, ResponseCode> ID_MAP = new HashMap<>();
static {
for (ResponseCode type : values()) {
if (type.id > 0) {
ID_MAP.put(type.id, type);
}
}
}
public final String info;
public final int id;
ResponseCode(int id, String info) {
this.info = info;
this.id = id;
}
public static ResponseCode fromId(int id) {
return ID_MAP.get(id);
}
@Override
public String toString() {
return info;
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,32 @@
package love.sola.netsupport.sql;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* ***********************************************
* Created by Sola on 2014/8/20.
* Don't modify this source without my agreement
* ***********************************************
*/
public class SQLCore {
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 void free(Connection conn) {
if (conn != null) try { conn.close(); } catch (SQLException e) { }
}
}

View File

@@ -0,0 +1,14 @@
package love.sola.netsupport.sql;
/**
* ***********************************************
* Created by Sola on 2015/11/10.
* Don't modify this source without my agreement
* ***********************************************
*/
public class TableConfig {
}

View File

@@ -0,0 +1,66 @@
package love.sola.netsupport.sql;
import love.sola.netsupport.enums.ISPType;
import love.sola.netsupport.pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* ***********************************************
* Created by Sola on 2015/11/10.
* Don't modify this source without my agreement
* ***********************************************
*/
public class TableUser extends SQLCore {
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 User getUserByName(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 { free(conn); }
return null;
}
public static User getUserById(int id) {
Connection conn = null;
try {
conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user_info WHERE id=?");
ps.setInt(1, id);
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 { free(conn); }
return null;
}
}

View File

@@ -0,0 +1,100 @@
package love.sola.netsupport.wechat;
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);
}
@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);
}
}

View File

@@ -0,0 +1,28 @@
package love.sola.netsupport.wechat.handler;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import java.util.HashMap;
import java.util.Map;
/**
* ***********************************************
* Created by Sola on 2015/11/5.
* Don't modify this source without my agreement
* ***********************************************
*/
public class HandlerList {
public static Map<String, Class<? extends WxMpMessageHandler>> handlers = new HashMap<>();
static {
handlers.put("Register", RegisterHandler.class);
}
public void init(WxMpMessageRouter router) {
}
}

View File

@@ -0,0 +1,33 @@
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.WxMpMessageRouter;
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 {
public RegisterHandler(WxMpMessageRouter router) {
router.rule().async(false).rContent("^").handler(this).end();
}
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager)
throws WxErrorException {
return null;
}
}

View File

@@ -0,0 +1,45 @@
package love.sola.netsupport.wechat.intercepter;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
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 CheckSpamInterceptor implements WxMpMessageInterceptor {
private static class ValueLoader extends CacheLoader<String, Long> {
@Override
public Long load(String key) throws Exception {
return System.currentTimeMillis(); //TODO: CONFIGURATION
}
}
private static LoadingCache<String, Long> cache = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.maximumSize(4096)
.expireAfterWrite(5, TimeUnit.SECONDS)
.build(new ValueLoader());
@Override
public boolean intercept(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
if (cache.getIfPresent(wxMessage.getFromUserName()) != null) {
}
return false;
}
}

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- General description of your web application -->
<display-name>Network Support Application</display-name>
<description>
If you have any problem, please contact loli@sola.love .
</description>
<!-- Servlet definitions for the servlets that make up
your web application, including initialization
parameters. With Tomcat, you can also send requests
to servlets not listed here with a request like this:
http://localhost:8080/{context-path}/servlet/{classname}
but this usage is not guaranteed to be portable. It also
makes relative references to images and other resources
required by your servlet more complicated, so defining
all of your servlets (and defining a mapping to them with
a servlet-mapping element) is recommended.
Servlet initialization parameters can be retrieved in a
servlet or JSP page by calling:
String value =
getServletConfig().getInitParameter("name");
where "name" matches the <param-name> element of
one of these initialization parameters.
You can define any number of servlets, including zero.
-->
<!--
<servlet>
<servlet-name>C3P0Test</servlet-name>
<servlet-class>love.sola.netsupport.C3P0Test</servlet-class>
</servlet>
-->
<!-- Define mappings that are used by the servlet container to
translate a particular request URI (context-relative) to a
particular servlet. The examples below correspond to the
servlet descriptions above. Thus, a request URI like:
http://localhost:8080/{contextpath}/graph
will be mapped to the "graph" servlet, while a request like:
http://localhost:8080/{contextpath}/saveCustomer.do
will be mapped to the "controller" servlet.
You may define any number of servlet mappings, including zero.
It is also legal to define more than one mapping for the same
servlet, if you wish to.
-->
<!--
<servlet-mapping>
<servlet-name>C3P0Test</servlet-name>
<url-pattern>/c3p0test</url-pattern>
</servlet-mapping>
-->
<!-- Define the default session timeout for your application,
in minutes. From a servlet or JSP page, you can modify
the timeout for a particular session dynamically by using
HttpSession.getMaxInactiveInterval(). -->
<session-config>
<session-timeout>30</session-timeout> <!-- 30 minutes -->
</session-config>
</web-app>