一睹为快
ControllerAspect 切面类
import cn.hutool.json.JSONUtil;
import com.wangfeiyong.model.response.SdResponse;
import com.wangfeiyong.service.ex.SdException;
import com.wangfeiyong.validate.ParameterValidator;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Aspect
@Component
public class ControllerAspect {
@Pointcut("execution(* com.wangfeiyong.controller.*.*(..))")
public void pointcut() {
}
@Around("pointcut()")
public Object doAround(ProceedingJoinPoint pjp) {
long sT = System.currentTimeMillis();
try {
Object result = pjp.proceed();
setSpendTime(result, sT);
logSuccessInfo(pjp, result);
return result;
} catch (Throwable e) {
return handleDoAroundCatch(pjp, e, sT);
}
}
private SdResponse handleDoAroundCatch(ProceedingJoinPoint pjp, Throwable e, long sT) {
SdResponse sdResponse;
if (e instanceof SdException) {
SdException sdException = (SdException) e;
sdResponse = SdResponse.fail(sdException.getCode(), sdException.getMsg());
} else {
sdResponse = SdResponse.fail(e);
}
setSpendTime(sdResponse, sT);
logFailInfo(pjp, sdResponse);
return sdResponse;
}
private Map<String, Object> getRequestLogMap() {
Map<String, Object> requestLogMap = new HashMap<>();
HttpServletRequest httpServletRequest = getHttpServletRequest();
requestLogMap.put("protocol", httpServletRequest.getProtocol(