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 { @Override public boolean supports(MethodParameter returnType, Class> converterType) { return returnType.hasMethodAnnotation(Encrypt.class) || returnType.getContainingClass().isAnnotationPresent(Encrypt.class); } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class> 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); } } }