| 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<Object> { | 
|   | 
|     @Autowired | 
|     private ApiLogService apiLogService; | 
|   | 
|     @Override | 
|     public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { | 
|         return true; | 
|     } | 
|   | 
|     @Override | 
|     public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> 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 ""; | 
|         } | 
|     } | 
|   | 
| } |