Files
tiesheng-springboot/springboot-encrypt/src/main/java/com/tiesheng/encrypt/config/EncryptResponseBodyAdvice.java
2023-03-06 15:35:39 +08:00

62 lines
2.1 KiB
Java

package com.tiesheng.encrypt.config;
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.LogFactory;
import com.tiesheng.util.config.EncryptConfig;
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.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* @author hao
*/
@ControllerAdvice
public class EncryptResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Autowired
EncryptConfig encryptConfig;
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return AnnotationUtil.getAnnotation(returnType.getContainingClass(), RestController.class) != null;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends
HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
try {
String content = JSONUtil.toJsonStr(body);
String respData = JSONUtil.parseObj(content).getStr("data");
if (StrUtil.isEmpty(respData)) {
// 无需加密
return body;
}
JSONObject resp = JSONUtil.parseObj(content);
resp.set("encrypted", true);
if (resp.getInt("code") == 200) {
resp.set("data", encryptConfig.encrypt(respData));
}
return resp;
} catch (Exception var17) {
LogFactory.get().info("加密数据异常", var17);
}
return body;
}
}