package vip.xiaonuo.sys.core.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
/**
* 小程序切面编程
*
* @Author lz
* @Date 2022/1/16 11:33
* @Version 1.0
*/
@Slf4j
@Aspect
@Configuration
public class WxAop {
// 定义切点Pointcut 自行写入对应的controller包路径
@Pointcut("execution(* vip.xx.xx.miniapp.controller.*.*(..))")
public void excudeService() {
}
@Around("excudeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
HttpServletRequest request = sra.getRequest();
HttpServletResponse response = sra.getResponse();
String url = request.getRequestURL().toString();
String method = request.getMethod();
String uri = request.getRequestURI();
String queryString = request.getQueryString();
//这里可以获取到get请求的参数和其他信息
log.info("小程序拦截请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString);
//重点 这里就是获取@RequestBody参数的关键 调试的情况下 可以看到o变量已经获取到了请求的参数
Object[] o = pjp.getArgs();
if (request.getHeader("openid") != null && (!request.getHeader("openid").equals(""))) {
final String openid = request.getHeader("openid");
for (Object o1 : o) {
try {
final Field openid1 = o1.getClass().getDeclaredField("openid");
if (openid1 != null) {
final Method setOpenid = o1.getClass().getMethod("setOpenid", String.class);
// 对h对象,调用这个方法
setOpenid.invoke(o1, openid);
}
} catch (Exception e) {
}
}
}
// result的值就是被拦截方法的返回值
Object result = pjp.proceed();
return result;
}
}
小程序hader openid 切面aop 到对象参数
最新推荐文章于 2024-04-04 11:20:05 发布