You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.0 KiB
162 lines
5.0 KiB
package com.ynxbd.wx.servlet.base;
|
|
|
|
import com.ynxbd.common.helper.common.HttpHelper;
|
|
import com.ynxbd.common.helper.common.JsonHelper;
|
|
import com.ynxbd.common.result.Result;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.slf4j.MDC;
|
|
|
|
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.List;
|
|
import java.util.Map;
|
|
|
|
// servlet基类
|
|
@Slf4j
|
|
public abstract class BaseServlet extends HttpServlet {
|
|
|
|
@Override
|
|
public void init() {
|
|
}
|
|
|
|
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
|
MDC.remove("ip");
|
|
MDC.put("ip", HttpHelper.getIpAddress(req));
|
|
doPost(req, resp);
|
|
}
|
|
|
|
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
|
req.setCharacterEncoding("utf-8");
|
|
resp.setCharacterEncoding("utf-8");
|
|
|
|
try {
|
|
// 响应数据处理
|
|
Result result = requestMapping(req, resp);
|
|
outResp(resp, result);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
outResp(resp, Result.error(e.getMessage()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 处理请求内容
|
|
*
|
|
* @param req 请求
|
|
* @param resp 响应
|
|
* @return 响应内容
|
|
*/
|
|
protected abstract Result requestMapping(HttpServletRequest req, HttpServletResponse resp) throws Exception;
|
|
|
|
|
|
/**
|
|
* 是否打印请求参数
|
|
*
|
|
* @param request 请求对象
|
|
*/
|
|
protected static void logParams(HttpServletRequest request) {
|
|
Map<String, String[]> parameterMap = request.getParameterMap();
|
|
String p;
|
|
int cur = 0;
|
|
int size = parameterMap.size();
|
|
|
|
StringBuilder params = new StringBuilder();
|
|
for (Map.Entry<String, String[]> map : parameterMap.entrySet()) {
|
|
cur++;
|
|
String val = map.getValue()[0];
|
|
if (val.length() > 666) {
|
|
val = "参数过长,不进行打印";
|
|
}
|
|
p = map.getKey() + "=" + val;
|
|
if (cur != size) {
|
|
p += ", ";
|
|
}
|
|
params.append(p);
|
|
}
|
|
|
|
log.info(request.getServletPath() + "[请求参数:{{}}]", params);
|
|
}
|
|
|
|
/**
|
|
* 设置响应内容
|
|
*
|
|
* @param data 数据
|
|
* @param resp 响应流
|
|
*/
|
|
private static void outResp(HttpServletResponse resp, Object data) {
|
|
resp.setContentType("application/json;charset=utf-8");
|
|
/* 允许跨域的主机地址 */
|
|
resp.setHeader("Access-Control-Allow-Origin", "*");
|
|
/* 允许跨域的请求方法GET, POST, HEAD 等 */
|
|
resp.setHeader("Access-Control-Allow-Methods", "*");
|
|
/* 重新预检验跨域的缓存时间 (s) */
|
|
resp.setHeader("Access-Control-Max-Age", "3600");
|
|
/* 允许跨域的请求头 */
|
|
resp.setHeader("Access-Control-Allow-Headers", "*");
|
|
/* 是否携带cookie */
|
|
resp.setHeader("Access-Control-Allow-Credentials", "true");
|
|
|
|
try (PrintWriter pw = resp.getWriter()) {
|
|
pw.write(JsonHelper.toJsonString(data));
|
|
pw.flush();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取对象
|
|
*
|
|
* @param req 请求
|
|
* @param key 对象key
|
|
* @param clazz 类
|
|
* @param <T> T
|
|
* @return 对象
|
|
*/
|
|
protected static <T> T getMapObject(HttpServletRequest req, String key, Class<T> clazz) {
|
|
Map<String, String[]> map = req.getParameterMap();
|
|
T t = null;
|
|
for (Map.Entry<String, String[]> m : map.entrySet()) {
|
|
if (m.getKey().equals(key)) {
|
|
String val = m.getValue()[0];
|
|
if (val == null) return null;
|
|
try {
|
|
t = JsonHelper.parseObject(val, clazz);
|
|
} catch (Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
return t;
|
|
}
|
|
|
|
/**
|
|
* 获取对象
|
|
*
|
|
* @param req 请求
|
|
* @param key 对象key
|
|
* @param clazz 类
|
|
* @param <T> T
|
|
* @return 对象
|
|
*/
|
|
protected static <T> List<T> getMapList(HttpServletRequest req, String key, Class<T> clazz) {
|
|
Map<String, String[]> map = req.getParameterMap();
|
|
List<T> ts = null;
|
|
for (Map.Entry<String, String[]> m : map.entrySet()) {
|
|
if (m.getKey().equals(key)) {
|
|
String val = m.getValue()[0];
|
|
if (val == null) return null;
|
|
try {
|
|
ts = JsonHelper.parseArray(val, clazz);
|
|
} catch (Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
if (ts == null) return null;
|
|
return ts.size() > 0 ? ts : null;
|
|
}
|
|
}
|
|
|