使用切面 获取请求url,请求参数,来源IP

    技术2022-07-31  70

    切面类

    @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); } // String json = JSON.toJSONString(object, SerializeConfig.getGlobalInstance()); // log.info("响应报文: {}", json); return object; }

    requestUtils类

    public class RequestUtils { //获取HttpServletRequest public static HttpServletRequest getHttpServletRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } //获取ip 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; } }
    Processed: 0.012, SQL: 9