访问controller接口前修改方法入参,参数为对象(如@@RequestBody HttpHeaders headers)
程序员文章站
2022-04-25 22:06:01
...
可以通过环绕通知实现
这里我是扫描自定义注解。
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @Author: NJ
* @Description: 切面,替换自定义注解下面的header
* @Date: 2019/8/8
*/
@Component
@Aspect
public class AnnotationAspect {
@Pointcut("@annotation(com.annotation.ChangeHeader)")
private void cutMethod() {
}
/**
* 环绕通知,修改header @ChangeHeader标记的方法修改header
* 目前使用该注解之在用户相关controller添加
* @param pjp
* @return
* @throws Throwable
*/
@Around("cutMethod()")
public Object changeHeader(ProceedingJoinPoint pjp) throws Throwable{
//获取传入的参数
Object[] args = pjp.getArgs();
ReturnMsg<String> returnMsg = new ReturnMsg<>();
try {
for(int i = 0; i < args.length; i++){
if(args[i] instanceof HttpHeaders){
HttpHeaders paramValue = (HttpHeaders)args[i];
/** 修改参数 **/
paramValue.set("loginUserName",“替换原来header里的值”);
/** 修改入参 **/
args[i] = paramValue;
}
}
}catch (Exception e){
/** 异常,抛出json格式内容 **/
e.printStackTrace();
returnMsg.handleException(e);
return returnMsg;
}
/** 放行,进入方法 **/
Object retVal = pjp.proceed(args)
return retVal;
}
}
上一篇: 简单的springAop实现
下一篇: CAD怎么设置A4规格的H图框?