利用SpringAOP的返回通知处理数据加密返回

项目安全要求把所有返回值做加密处理,利用SpringAOP的返回切面可以简单方便的做到该需求。

java 复制代码
@Aspect
public class ResponseDataEncryptAspect {

    private ObjectMapper objectMapper;

    public ResponseDataEncryptAspect () {
        this.objectMapper = new ObjectMapper();
        // 保持空值也被序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
    }
	
	// 拦截Controller内带@RequestMapper的方法及衍生注解即可
    @AfterReturning(value = PointCut.CONTROLLER_POINT_CUT, returning = "res")
    public void jsonDateEncrypt(JoinPoint joinPoint, Object res){
        // 只处理JsonResult返回值
        if (res instanceof JsonResult) {
            JsonResult jsonResult = (JsonResult) res;
            Object data = jsonResult.getData();
            if (null != data) {
                // 把data转成json串,再把json串加密,再替换原来的data,vue拦截到data作全局解密,不影响已绑定的功能。
                String json = objectMapper.writeValueAsString(data);
                String cryptResult = ZYCryptUtils.encryptAES(json);
                // 在全局响应结果里添加一个布尔值,方便前端判断到底是密文还是明文
                jsonResult.setEncrypt(true);
                jsonResult.setData(cryptResult);
            }
        }
    }
}

实际效果:

相关推荐
小信丶1 分钟前
Spring Cloud Stream EnableBinding注解详解:定义、应用场景与示例代码
java·spring boot·后端·spring
无限进步_5 分钟前
【C++】验证回文字符串:高效算法详解与优化
java·开发语言·c++·git·算法·github·visual studio
亚历克斯神6 分钟前
Spring Cloud 2026 架构演进
java·spring·微服务
七夜zippoe9 分钟前
Spring Cloud与Dubbo架构哲学对决
java·spring cloud·架构·dubbo·配置中心
海派程序猿9 分钟前
Spring Cloud Config拉取配置过慢导致服务启动延迟的优化技巧
java
阿维的博客日记20 分钟前
为什么不逃逸代表不需要锁,JIT会直接删掉锁
java
William Dawson21 分钟前
CAS的底层实现
java
九英里路33 分钟前
cpp容器——string模拟实现
java·前端·数据结构·c++·算法·容器·字符串
YDS82937 分钟前
大营销平台 —— 抽奖前置规则过滤
java·spring boot·ddd
仍然.41 分钟前
多线程---CAS,JUC组件和线程安全的集合类
java·开发语言