aop对请求后端的参数修改_SpringBoot自定义注解使用AOP实现请求参数解密以及响应数据加密...

本文介绍了如何在SpringBoot中利用AOP和自定义注解@Secret实现请求参数解密及响应数据加密。通过创建注解、定义切面,实现了对带有@Secret注解的Controller类或方法的参数解密和返回数据加密,降低了代码耦合。详细步骤包括创建项目、定义注解、在Controller中使用注解以及编写AOP切面处理加密解密操作。
摘要由CSDN通过智能技术生成

SpringBoot自定义注解使用AOP实现请求参数解密以及响应数据加密

一、前言

本篇文章将依托与SpringBoot平台,自定义注解用来标识接口请求是否实现加密解密。使用AOP切面来具体操作解密加密,实现对源代码的低耦合,不在原基础上做很大的改动。

本篇文章的所有示例,都上传到我的github中,欢迎大家拉取测试,欢迎star github

实现要求:

自定义一个注解@Secret,用来标识需要实现加密解密

作用在Controller类上,表示此Controller类的所有接口都实现加密解密

作用来单一方法上,表示此接口方法需要实现加密解密

使用AOP切面编程实现

在接口方法执行之前将前端的加密参数解密并重新赋给接口参数

在接口方法响应之后,将返回的数据进行加密返回

在配置文件中配置,是否开启全局的加密解密操作

实现流程:

Image.png

前端请求的接口将请求参数json通过AES加密生成加密字符串,然后将加密字符串通过名为encyptStr字段传递给后端。

AOP前置方法拦截,将encyptStr字符串通过AES解密得到原始请求参数json,将json映射为请求方法的参数对象User。

接口通过参数成功响应,并将响应数据直接返回。

AOP后置方式拦截,将响应参数data字段里的数据AES加密,并返回给前端

前端收到请求响应,通过code判断请求是否成功,AES加密data字段得到需要的数据。

二、实现操作

1. 创建SpringBoot项目

创建一个SpringBoot项目,导入必要的maven依赖。

使用AOP切面需要导入AOP的启动器

lombok是一个通过注解简化代码的工具,在idea中使用需要安装lombok插件

json转换工具,apache工具类

pom.xml

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-aop

org.projectlombok

lombok

true

com.alibaba

fastjson

1.2.52.sec06

org.apache.commons

commons-lang3

3.9

2. 自定注解@Secret

我们通过自定义的注解,来标识类或接口,告诉AOP哪些类或方法需要执行加密解密操作,更加的灵活。

Secret.java

package com.agger.springbootaopdemo.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* @classname: Secret

* @description: 自定义注解,用来标识请求类 或者方法是否使用AOP加密解密

* @author chenhx

* @date 2019-12-05 13:48:03

*/

@Target({ElementType.TYPE,ElementType.METHOD}) // 可以作用在类上和方法上

@Retention(RetentionPolicy.RUNTIME) // 运行时起作用

public @interface Secret {

// 参数类(用来传递加密数据,只有方法参数中有此类或此类的子类才会执行加解密)

Class value();

// 参数类中传递加密数据的属性名,默认encryptStr

String encryptStrName() default "encryptStr";

}

自定义注解很简单,只需要确定注解的作用位置和运行时机。其中有两个变量value和encryptStrName。

value没有默认值,是必传的参数,用来表示需要加解密的参数类或父类。AOP中或用到。

encryptStrName默认值为"encryptStr",用来表示前端传递的加密参数名称是什么,value类中必须存在此字段

3. Controller中使用

定义好@Secret注解后,我们就可以在Controller中使用了,不过现在只相当于是一个标注,还没有起任何作用,需要我们再定义好AOP后才会起作用。

@Secret注解作用来类上

UserController.java

package com.agger.springbootaopdemo.controller;

import com.agger.springbootaopdemo.annotation.Secret;

import com.agger.springbootaopdemo.vo.BaseVO;

import com.agger.springbootaopdemo.vo.ResultVO;

import com.agger.springbootaopdemo.vo.UserVO;

import or

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值