初始化

This commit is contained in:
2022-06-21 20:47:46 +08:00
parent b666a24a98
commit 59da3376c1
1246 changed files with 129600 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
package com.njcn.web.advice;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.SecurityConstants;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.pojo.constant.LogInfo;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.utils.ReflectCommonUtil;
import com.njcn.web.utils.RequestUtil;
import com.njcn.web.service.ILogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2021年07月07日 16:46
*/
@Slf4j
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {
@Autowired
private GeneralInfo generalInfo;
@Autowired
private ILogService logService;
/**
* 无需审计记录的操作,比如根据客户端获取客户端信息
*/
private final static List<String> UN_LOG_INFO = Arrays.asList("根据客户端名查询信息","当前主题","未知业务");
/**
* controller返回的响应体包含的状态码而非全局异常捕获器处抛出来的状态码
*/
private final static List<String> FILTER_CODE = Arrays.asList(CommonResponseEnum.SUCCESS.getCode(), CommonResponseEnum.FAIL.getCode(), CommonResponseEnum.NO_DATA.getCode());
/**
* 判断下结果,是不是成功
*
* @param returnType 返回类型包含大量信息controller、method、result等等
* @param converterType 消息转换器类型目前配置的是Jackson
*/
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
/**
* 拦截所有请求成功的操作进行日志入库处理
* 需要 用户标识、事件描述、事件结果、操作IP、事件类型、事件严重度、操作时间、操作类型
*
* @param body .
* @param returnType .
* @param selectedContentType .
* @param selectedConverterType .
* @param request .
* @param response .
* @return .
*/
@Override
public Object beforeBodyWrite(Object body, @Nonnull MethodParameter returnType, @Nonnull MediaType selectedContentType, @Nonnull Class selectedConverterType, @Nonnull ServerHttpRequest request, @Nonnull ServerHttpResponse response) {
if (body instanceof HttpResult) {
HttpResult httpResult = (HttpResult) body;
if (FILTER_CODE.contains(httpResult.getCode())) {
String methodDescribe = ReflectCommonUtil.getMethodDescribeByMethod(returnType.getMethod());
if (!UN_LOG_INFO.contains(methodDescribe)) {
logService.recodeAdviceLog(request, returnType, httpResult, methodDescribe);
}
}
}
return body;
}
}