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;
|
}
|
|
|
}
|