| | |
| | | Map<String, Object> payload = new LinkedHashMap<>(); |
| | | payload.put("method", request.getMethod()); |
| | | payload.put("uri", request.getRequestURI()); |
| | | payload.put("clientIp", resolveClientIp(request)); |
| | | payload.put("userAgent", request.getHeader("User-Agent")); |
| | | payload.put("handler", jp.getSignature().toShortString()); |
| | | payload.put("args", summarizeArgs(jp.getArgs())); |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | private String resolveClientIp(HttpServletRequest request) { |
| | | String[] candidateHeaders = { |
| | | "X-Forwarded-For", |
| | | "X-Real-IP", |
| | | "Proxy-Client-IP", |
| | | "WL-Proxy-Client-IP" |
| | | }; |
| | | for (String header : candidateHeaders) { |
| | | String value = request.getHeader(header); |
| | | if (!StringUtils.hasText(value)) { |
| | | continue; |
| | | } |
| | | String first = value.split(",")[0].trim(); |
| | | if (StringUtils.hasText(first) && !"unknown".equalsIgnoreCase(first)) { |
| | | return first; |
| | | } |
| | | } |
| | | return request.getRemoteAddr(); |
| | | } |
| | | |
| | | private Object[] summarizeArgs(Object[] args) { |
| | | if (args == null || args.length == 0) { |
| | | return new Object[0]; |