package com.zy.common.config; import com.alibaba.fastjson.JSON; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.service.ApiLogService; import com.zy.common.utils.IpTools; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; /** * 返回值处理 * Created by vincent on 2022/4/22 */ @Slf4j @ControllerAdvice public class ControllerResAdvice implements ResponseBodyAdvice { @Autowired private ApiLogService apiLogService; @Override public boolean supports(MethodParameter methodParameter, Class> aClass) { return true; } @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { if (serverHttpRequest instanceof ServletServerHttpRequest) { HttpServletRequest request = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest(); Object appAuth = request.getAttribute("appAuth"); if (appAuth != null) { if (o instanceof R) { String appkey = request.getHeader("appkey"); Object reqCache = request.getAttribute("cache"); if (!Cools.isEmpty(appkey)) { // 保存接口日志 apiLogService.save( String.valueOf(appAuth), request.getRequestURI(), appkey, IpTools.gainRealIp(request), reqCache==null?"": JSON.toJSONString(reqCache), JSON.toJSONString(o), String.valueOf(((R) o).get("code")).equalsIgnoreCase("200") ); } } } } return o; } public static String json(HttpServletRequest request) { try { BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); String inputStr; while ((inputStr = streamReader.readLine()) != null) { sb.append(inputStr); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); return ""; } } }