This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
k18-ntcs-web-argus-service/src/main/java/com/nis/web/controller/BaseRestController.java

423 lines
16 KiB
Java
Raw Normal View History

2017-12-19 14:55:52 +08:00
/**
* @Title: BaseRestController.java
* @Package com.nis.web.controller
* @Description: TODO(用一句话描述该文件做什么)
* @author darnell
* @date 2016年8月24日 下午5:30:23
* @version V1.0
*/
package com.nis.web.controller;
import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
2017-12-19 14:55:52 +08:00
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2017-12-19 14:55:52 +08:00
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMethod;
import com.nis.domain.LogEntity;
2017-12-19 14:55:52 +08:00
import com.nis.domain.restful.ConfigCommonSource;
import com.nis.restful.RestBusinessCode;
import com.nis.restful.RestConstants;
import com.nis.restful.RestResult;
import com.nis.restful.RestServiceException;
import com.nis.util.Constants;
import com.nis.util.DateUtils;
import com.nis.web.service.AuditLogThread;
2017-12-19 14:55:52 +08:00
import com.nis.web.service.ServicesRequestLogService;
import com.zdjizhi.utils.StringUtil;
2017-12-19 14:55:52 +08:00
/**
* @ClassName: BaseRestController
* @Description: TODO(Rest服务基础业务控制类)
* @author (darnell)
* @date 2016年8月24日 下午5:30:23
* @version V1.0
*/
public class BaseRestController {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
2017-12-19 14:55:52 +08:00
/**
*
* @Title: serviceResponse
* @Description: TODO(服务成功结果响应)
* @param @param
* request
* @param @param
* response
* @param @param
* msg
* @param @return
* 入参
* @return Map 返回类型
* @author darnell
* @throws @date
* 2016年8月24日 下午7:53:37
* @version V1.0
*/
2018-07-19 10:19:57 +08:00
public Map serviceResponse(AuditLogThread thread, long time, HttpServletRequest request,
HttpServletResponse response, String msg) {
2017-12-19 14:55:52 +08:00
RestResult restResult = new RestResult();
String requestMethod = request.getMethod();
if (requestMethod.equals(RequestMethod.GET.name())) {
restResult.setStatus(HttpStatus.OK);
restResult.setBusinessCode(RestBusinessCode.query_success);
} else if (requestMethod.equals(RequestMethod.DELETE.name())) {
restResult.setStatus(HttpStatus.NO_CONTENT);
restResult.setBusinessCode(RestBusinessCode.delete_success);
} else if (requestMethod.equals(RequestMethod.PUT.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
} else if (requestMethod.equals(RequestMethod.POST.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.add_success);
}
restResult.setFromUri(request.getRequestURI());
restResult.setMsg(msg);
restResult.setTraceCode(thread.getTraceCode());
2017-12-19 14:55:52 +08:00
thread.setConsumerTime(time);
thread.setBusinessCode(restResult.getBusinessCode().getValue());
new Thread(thread).start();
return convert(restResult);
}
/**
*
* @Title: serviceResponse
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param
* request
* @param @param
* response
* @param @param
* msg
* @param @param
* data
* @param @return
* 入参
* @return Map 返回类型
* @author darnell
* @throws @date
* 2016年8月24日 下午8:40:44
* @version V1.0
*/
2018-07-19 10:19:57 +08:00
public Map serviceResponse(AuditLogThread thread, long time, HttpServletRequest request,
HttpServletResponse response, String msg, Object data) {
2017-12-19 14:55:52 +08:00
RestResult restResult = new RestResult();
String requestMethod = request.getMethod();
if (requestMethod.equals(RequestMethod.GET.name())) {
restResult.setStatus(HttpStatus.OK);
restResult.setBusinessCode(RestBusinessCode.query_success);
} else if (requestMethod.equals(RequestMethod.DELETE.name())) {
restResult.setStatus(HttpStatus.NO_CONTENT);
restResult.setBusinessCode(RestBusinessCode.delete_success);
} else if (requestMethod.equals(RequestMethod.PUT.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
} else if (requestMethod.equals(RequestMethod.POST.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.add_success);
}
restResult.setFromUri(request.getRequestURI());
restResult.setData(data);
restResult.setMsg(msg);
restResult.setTraceCode(thread.getTraceCode());
2017-12-19 14:55:52 +08:00
thread.setConsumerTime(time);
thread.setBusinessCode(restResult.getBusinessCode().getValue());
new Thread(thread).start();
return convert(restResult);
}
2017-12-19 14:55:52 +08:00
/**
* 不将日志插入到数据库中,只返回到前台
*
2017-12-19 14:55:52 +08:00
* @param time
* @param request
* @param response
* @param msg
* @param data
* @return
*/
public Map testServiceResponse(long time, HttpServletRequest request, HttpServletResponse response, String msg,
Object data) {
2017-12-19 14:55:52 +08:00
RestResult restResult = new RestResult();
String requestMethod = request.getMethod();
if (requestMethod.equals(RequestMethod.GET.name())) {
restResult.setStatus(HttpStatus.OK);
restResult.setBusinessCode(RestBusinessCode.query_success);
} else if (requestMethod.equals(RequestMethod.DELETE.name())) {
restResult.setStatus(HttpStatus.NO_CONTENT);
restResult.setBusinessCode(RestBusinessCode.delete_success);
} else if (requestMethod.equals(RequestMethod.PUT.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
} else if (requestMethod.equals(RequestMethod.POST.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.add_success);
}
restResult.setFromUri(request.getRequestURI());
restResult.setData(data);
restResult.setMsg(msg);
return convert(restResult);
}
/**
*
* @Title: serviceResponse
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param
* request
* @param @param
* response
* @param @param
* msg
* @param @param
* data
* @param @return
* 入参
* @return Map 返回类型
* @author darnell
* @throws @date
* 2016年8月24日 下午8:40:44
* @version V1.0
*/
2018-07-19 10:19:57 +08:00
public Map compileServiceResponse(AuditLogThread thread, long time, HttpServletRequest request,
HttpServletResponse response, String msg, Object data) {
2017-12-19 14:55:52 +08:00
RestResult restResult = new RestResult();
String requestMethod = request.getMethod();
if (requestMethod.equals(RequestMethod.GET.name())) {
restResult.setStatus(HttpStatus.OK);
restResult.setBusinessCode(RestBusinessCode.query_success);
} else if (requestMethod.equals(RequestMethod.DELETE.name())) {
restResult.setStatus(HttpStatus.NO_CONTENT);
restResult.setBusinessCode(RestBusinessCode.delete_success);
} else if (requestMethod.equals(RequestMethod.PUT.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
} else if (requestMethod.equals(RequestMethod.POST.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.add_success);
} else if (requestMethod.equals(RequestMethod.PATCH.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
2017-12-19 14:55:52 +08:00
}
restResult.setFromUri(request.getRequestURI());
restResult.setData(data);
restResult.setMsg(msg);
restResult.setTraceCode(thread.getTraceCode());
2017-12-19 14:55:52 +08:00
thread.setConsumerTime(time);
// thread.setExceptionInfo(msg);
2017-12-19 14:55:52 +08:00
thread.setBusinessCode(restResult.getBusinessCode().getValue());
new Thread(thread).start();
return convert(restResult);
}
/**
* 日志结果响应格式规范
*
* @param auditLogThread
* @param executedTime
* @param request
* @param msg
* @param data
* @param logSource
* @return
*/
2018-07-19 10:19:57 +08:00
public Map serviceLogResponse(AuditLogThread auditLogThread, long executedTime, HttpServletRequest request,
String msg, Object data, Integer logSource) {
2017-12-19 14:55:52 +08:00
RestResult restResult = new RestResult();
String requestMethod = request.getMethod();
if (requestMethod.equals(RequestMethod.GET.name())) {
restResult.setStatus(HttpStatus.OK);
restResult.setBusinessCode(RestBusinessCode.query_success);
} else if (requestMethod.equals(RequestMethod.DELETE.name())) {
restResult.setStatus(HttpStatus.NO_CONTENT);
restResult.setBusinessCode(RestBusinessCode.delete_success);
} else if (requestMethod.equals(RequestMethod.PUT.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.update_success);
} else if (requestMethod.equals(RequestMethod.POST.name())) {
restResult.setStatus(HttpStatus.CREATED);
restResult.setBusinessCode(RestBusinessCode.add_success);
}
restResult.setFromUri(request.getRequestURI());
restResult.setData(data);
restResult.setMsg(msg);
restResult.setLogSource(logSource);
restResult.setTraceCode(auditLogThread.getTraceCode());
auditLogThread.setConsumerTime(executedTime);
auditLogThread.setBusinessCode(restResult.getBusinessCode().getValue());
new Thread(auditLogThread).start();
2017-12-19 14:55:52 +08:00
return convert(restResult);
}
private Map convert(RestResult re) {
Map successMap = new LinkedHashMap();
successMap.put(RestConstants.REST_SERVICE_HTTP_STATUS, re.getStatus().value());
successMap.put(RestConstants.REST_SERVICE_BUSINESS_CODE, re.getBusinessCode().getValue());
successMap.put(RestConstants.REST_SERVICE_REASON, re.getBusinessCode().getErrorReason());
successMap.put(RestConstants.REST_SERVICE_MSG, re.getMsg());
successMap.put(RestConstants.REST_SERVICE_URI, re.getFromUri());
if (re.getActiveSys() != null) {
successMap.put(RestConstants.REST_SERVICE_ACTIVE_SYS, re.getActiveSys());
}
if (re.getLogSource() != null) {
successMap.put(RestConstants.REST_SERVICE_LOG_SOURCE, re.getLogSource());
}
successMap.put(RestConstants.TRACE_CODE, re.getTraceCode());
2017-12-19 14:55:52 +08:00
successMap.put(RestConstants.REST_SERVICE_DATA, re.getData());
return successMap;
}
/**
* 初始化数据绑定 1. 将所有传递进来的String进行HTML编码防止XSS攻击 2. 将字段中Date类型转换为String类型
*/
@InitBinder
protected void initBinder(WebDataBinder binder) {
// String类型转换将所有传递进来的String进行HTML编码防止XSS攻击
binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));
}
@Override
public String getAsText() {
Object value = getValue();
return value != null ? value.toString() : "";
}
});
// Date 类型转换
binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
setValue(DateUtils.parseDate(text));
}
});
}
/**
*
* checkOpAction(校验请求body的opAction) (这里描述这个方法适用条件 可选)
*
* @param thread
* 记录日志线程
* @param opAction
* @param need
* void
* @exception @since
* 1.0.0
*/
2018-07-19 10:19:57 +08:00
public void checkOpAction(AuditLogThread thread, long time, int opAction, int need) {
2017-12-19 14:55:52 +08:00
if (need != opAction) {
switch (need) {
case Constants.OPACTION_POST:
throw new RestServiceException(thread, time,
"操作行为错误,您使用的是POST请求,POST请求对应的opAction为" + Constants.OPACTION_POST + ",您请求中的opAction为" + opAction
+ ",对应的请求方式为" + convertOpAction(opAction) + "!",
RestBusinessCode.op_action_error.getValue());
case Constants.OPACTION_PUT:
throw new RestServiceException(thread, time,
"操作行为错误,您使用的是PUT请求,PUT请求对应的opAction为" + Constants.OPACTION_PUT + ",您请求中的opAction为" + opAction
+ ",对应的请求方式为" + convertOpAction(opAction) + "!",
RestBusinessCode.op_action_error.getValue());
case Constants.OPACTION_DELETE:
throw new RestServiceException(thread, time,
"操作行为错误,您使用的是DELETE请求,DELETE请求对应的opAction为" + Constants.OPACTION_DELETE + ",您请求中的opAction为"
+ opAction + ",对应的请求方式为" + convertOpAction(opAction) + "!",
RestBusinessCode.op_action_error.getValue());
case Constants.OPACTION_GET:
throw new RestServiceException(thread, time,
"操作行为错误,您使用的是GET请求,GET请求对应的opAction为" + Constants.OPACTION_GET + ",您请求中的opAction为" + opAction
+ ",对应的请求方式为" + convertOpAction(opAction) + "!",
RestBusinessCode.op_action_error.getValue());
default:
2018-07-19 10:19:57 +08:00
throw new RestServiceException(thread, time, "操作行为错误,未找到属性opAction对应业务",
2017-12-19 14:55:52 +08:00
RestBusinessCode.op_action_error.getValue());
}
}
}
private String convertOpAction(int opAction) {
switch (opAction) {
case Constants.OPACTION_POST:
return "POST";
case Constants.OPACTION_PUT:
return "PUT";
case Constants.OPACTION_DELETE:
return "DELETE";
case Constants.OPACTION_GET:
return "GET";
default:
return "未知";
}
}
protected AuditLogThread saveRequestLog(ServicesRequestLogService service, int opAction, HttpServletRequest request,
Object data) {
logger.debug("SaveRequestLogThread初始化开始----" + System.currentTimeMillis());
2018-07-19 10:19:57 +08:00
AuditLogThread thread = AuditLogThread.getNewSaveRequestLogThread(request);
2017-12-19 14:55:52 +08:00
thread.setService(service);
thread.setOpAction(opAction);
thread.setTraceCode(sdf.format(new Date()) + (Math.round((Math.random() * 9 + 1) * 10000) + ""));
2017-12-19 14:55:52 +08:00
if (data != null && ConfigCommonSource.class.isAssignableFrom(data.getClass())) {
ConfigCommonSource source = (ConfigCommonSource) data;
thread.setOperator(source.getOperator());
thread.setVersion(source.getVersion());
thread.setOpTime(source.getOpTime());
} else {
thread.setOperator("admin");
thread.setOpTime(new Date());
2017-12-19 14:55:52 +08:00
}
logger.info("SaveRequestLogThread初始化结束----" + System.currentTimeMillis());
return thread;
}
// 文件上传用
protected AuditLogThread saveRequestLog(ServicesRequestLogService service, int opAction, HttpServletRequest request,
Object data, Object fileInfo) {
2018-07-19 10:19:57 +08:00
AuditLogThread thread = AuditLogThread.getNewSaveRequestLogThread(request);
2017-12-19 14:55:52 +08:00
thread.setService(service);
// thread.setContent(fileInfo);
2017-12-19 14:55:52 +08:00
thread.setOpAction(opAction);
thread.setTraceCode(sdf.format(new Date()) + (Math.round((Math.random() * 9 + 1) * 10000) + ""));
2017-12-19 14:55:52 +08:00
if (data != null && ConfigCommonSource.class.isAssignableFrom(data.getClass())) {
System.out.println(data.getClass().getSimpleName());
ConfigCommonSource source = (ConfigCommonSource) data;
thread.setOperator(source.getOperator());
thread.setVersion(source.getVersion());
thread.setOpTime(source.getOpTime());
}
return thread;
}
/**
* 判断开始和结束时间是否为null,如果为null则初始化时间
*
* @param entity
* @throws Exception
*/
protected void resetTime(LogEntity<?> entity) throws Exception {
if (StringUtil.isEmpty(entity.getSearchFoundStartTime())
&& StringUtil.isEmpty(entity.getSearchFoundEndTime())) {
Map<String, String> map = DateUtils.getLocalTime(entity.getSearchFoundStartTime(),
entity.getSearchFoundEndTime(), Constants.LOG_LOCAL_TIME, "minute");
entity.setSearchFoundStartTime(map.get("startTime"));
entity.setSearchFoundEndTime(map.get("endTime"));
}
}
2017-12-19 14:55:52 +08:00
}