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.
		
		
		
		
			
				
					163 lines
				
				5.0 KiB
			
		
		
			
		
	
	
					163 lines
				
				5.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |