切面类
@Slf4j
@Aspect
@Component
public class RequestAspect {
@Around("execution(public * com.yex.proxy.controller.ApiController.*(..))")
public Object apiAround(ProceedingJoinPoint pPoint) throws Throwable {
HttpServletRequest request = RequestUtils.getHttpServletRequest();
String url = request.getRequestURI();
log.info("请求URL:[{}],来源IP:[{}]", url, RequestUtils.getIp(request));
Object[] args = pPoint.getArgs();
MethodSignature methodSignature = (MethodSignature)pPoint.getSignature();
String[] parameterNames = methodSignature.getParameterNames();
for (int i = 0; i < parameterNames.length; i++) {
if(i >= args.length){
break;
}
Object value = args[i];
String name = parameterNames[i];
if (!(value instanceof HttpServletRequest) && !(value instanceof HttpServletResponse)) {
log.info("请求参数[{}]:{}", name, JSONObject.toJSONString(value));
}
}
Object object = null;
try{
object = pPoint.proceed(args);
}catch (Exception e){
object = HttpResult.error(e.getMessage(),-1);
}
return object;
}
requestUtils类
public class RequestUtils {
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
public static String getIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
String unknown = "unknown";
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}