package com.ltkj.web.controller.api.advice;
|
|
import com.ltkj.web.controller.api.anno.Encrypt;
|
import com.ltkj.web.controller.api.utils.CryptoUtil;
|
import org.springframework.core.MethodParameter;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.http.server.ServerHttpRequest;
|
import org.springframework.http.server.ServerHttpResponse;
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
|
|
@RestControllerAdvice
|
public class EncryptResponseAdvice implements ResponseBodyAdvice<Object> {
|
|
@Override
|
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
|
return returnType.hasMethodAnnotation(Encrypt.class)
|
|| returnType.getContainingClass().isAnnotationPresent(Encrypt.class);
|
}
|
|
@Override
|
public Object beforeBodyWrite(Object body,
|
MethodParameter returnType,
|
MediaType selectedContentType,
|
Class<? extends HttpMessageConverter<?>> selectedConverterType,
|
ServerHttpRequest request,
|
ServerHttpResponse response) {
|
|
try {
|
String json = body instanceof String ? (String) body : new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(body);
|
System.out.println("加密前:" + json);
|
return CryptoUtil.encrypt(json);
|
} catch (Exception e) {
|
throw new RuntimeException("响应加密失败", e);
|
}
|
}
|
}
|