package com.xzx.gc.common.request; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ReflectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.ExceptionUtils; import com.xzx.gc.common.utils.SecurityUtil; import com.xzx.gc.common.utils.SpringUtil; import com.xzx.gc.entity.VersionInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; 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 java.util.List; /** * @author * @desc 返回数据加密 */ @ControllerAdvice public class MyResponseBodyAdvice implements ResponseBodyAdvice { @Autowired private BusinessUtil businessUtil; @Override public boolean supports(MethodParameter methodParameter, Class aClass) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { String url = serverHttpRequest.getURI().toString(); if (!businessUtil.isAuthUrl(url)||(SpringUtil.isDev()&&CollUtil.isNotEmpty(serverHttpRequest.getHeaders().get("swagger"))&&"true".equals(serverHttpRequest.getHeaders().get("swagger").get(0)))) { return body; } try { //添加版本头用于更新 String authKey = serverHttpRequest.getHeaders().get("authKey").get(0); String s = JSONUtil.toJsonStr(body); if (!url.contains("/admin")) { Object versionService = SpringUtil.getBean("versionService"); VersionInfo versionInfo = ReflectUtil.invoke(versionService, "find"); JSONObject jsonObject = JSONUtil.parseObj(s); if (versionInfo != null) { jsonObject.put("updateFlag", Convert.toStr(versionInfo.getUpdateFlag())); jsonObject.put("forceUpdateFlag", Convert.toStr(versionInfo.getForceUpdateFlag())); jsonObject.put("apkVersion", Convert.toStr(versionInfo.getApkMd5())); } s = JSONUtil.toJsonStr(jsonObject); } String encrypt = SecurityUtil.encryptRsaAndAes(authKey, s); return encrypt; } catch (Exception e) { ExceptionUtils.err("返回数据加密失败", e); } return body; } }