From 1103c4cfad422eeb9a10aa9323acb625a4e48fb0 Mon Sep 17 00:00:00 2001 From: TheWhiteDog9487 Date: Wed, 13 Aug 2025 16:31:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E7=A6=BB=E8=AE=B0=E5=BD=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=9A=84=E9=80=BB=E8=BE=91=E5=88=B0=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E8=BF=87=E6=BB=A4=E5=99=A8=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/Filter/LogClientInfo.java | 28 +++++++++++++++++++ .../thewhitedog9487/WebAPI/Controller/IP.java | 9 ++---- .../WebAPI/Controller/Message.java | 5 ---- 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java new file mode 100644 index 0000000..0ed1645 --- /dev/null +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java @@ -0,0 +1,28 @@ +package xyz.thewhitedog9487.WebAPI.Controller.Filter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +@Slf4j +@Component +public class LogClientInfo extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + log.info("接收到对于{} {} 的请求", request.getMethod(), request.getRequestURL() + ( ( request.getQueryString() == null ) ? "" : "?" + request.getQueryString() ) ); + log.info("请求ID:{}", request.getRequestId()); + if (request.getHeader("CF-Connecting-IP".toLowerCase()) instanceof String IP) { + log.info("请求携带了CF-Connecting-IP头部,IP为:{}", IP); } + else if(request.getHeader("X-Forwarded-For".toLowerCase()) instanceof String IP) { + IP = IP.split(",")[0].trim(); + log.info("请求携带了X-Forwarded-For头部,IP为:{}", IP); } + else { + log.info("请求未携带CF-Connecting-IP和X-Forwarded-For头部,HttpServletRequest获取到的IP为:{}", request.getRemoteAddr()); } + filterChain.doFilter(request, response); } } \ No newline at end of file diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/IP.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/IP.java index 1b08870..5358292 100644 --- a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/IP.java +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/IP.java @@ -20,24 +20,21 @@ class IP { ResponseEntity GetIP(@RequestHeader Map HttpHeader, HttpServletRequest Request) { if (HttpHeader.get("CF-Connecting-IP".toLowerCase()) instanceof String IP) { /* - ↑ instanceof的模式变量一定非空 + ↑ instanceof的如果成功完成模式匹配,那么模式变量一定非空 相当于是: if (HttpHeader.get("CF-Connecting-IP" != null) { String IP = HttpHeader.get("CF-Connecting-IP"); } */ - log.info("请求携带了CF-Connecting-IP头部,IP为:{}", IP); return new ResponseEntity<>(IP, MultiValueMap.fromSingleValue(Map.of("Content-Type", "text/plain;charset=UTF-8")), HttpStatus.OK); } - else { - if (HttpHeader.get("X-Forwarded-For".toLowerCase()) instanceof String IP) { + else if (HttpHeader.get("X-Forwarded-For".toLowerCase()) instanceof String IP) { IP = IP.split(",")[0].trim(); - log.info("请求携带了X-Forwarded-For头部,IP为:{}", IP); return new ResponseEntity<>(IP, MultiValueMap.fromSingleValue(Map.of("Content-Type", "text/plain;charset=UTF-8")), HttpStatus.OK); } - log.info("请求未携带CF-Connecting-IP和X-Forwarded-For头部,HttpServletRequest获取到的IP为:{}", Request.getRemoteAddr()); + else { return new ResponseEntity<>(Request.getRemoteAddr(), MultiValueMap.fromSingleValue(Map.of("Content-Type", "text/plain;charset=UTF-8")), HttpStatus.OK); } diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java index 63a4ab6..8b33e26 100644 --- a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java @@ -10,7 +10,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MissingRequestHeaderException; import org.springframework.web.bind.annotation.*; -import org.springframework.web.context.request.WebRequest; import java.util.List; import java.util.Map; @@ -61,10 +60,6 @@ class Message { @ExceptionHandler(MissingRequestHeaderException.class) ResponseEntity HandleMissingHeader(MissingRequestHeaderException Exception, HttpServletRequest Request) { log.warn("请求缺少必要的头部信息:{}", Exception.getHeaderName()); - if (Request.getHeader("CF-Connecting-IP") instanceof String IP) { - log.warn("请求携带了CF-Connecting-IP头部,IP:{}", IP); - } else { - log.warn("请求未携带CF-Connecting-IP头部,IP:{}", Request.getRemoteAddr()); } return new ResponseEntity<>(new ResponseData( HttpStatus.BAD_REQUEST.value(), "请求缺少必要的头部信息",