如果你使用的是Tomcat 10以下的版本,可以通过以下方式获取HttpServletRequest对象:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
这种方式在Spring 4.x及以上版本适用。
另外,如果希望记录客户端访问IP等相关信息,可以通过HttpServletRequest对象的getRemoteAddr()方法获取客户端IP地址,例如:
String clientIP = request.getRemoteAddr();
要记录更多的信息,可以使用HttpServletRequest对象的其他方法,例如:
- getRemoteHost():获取远程客户机的DNS主机名或IP地址。
- getRemotePort():获取远程客户机的端口号。
- getServerName():获取当前Servlet正在响应请求的主机名。
- getServerPort():获取请求URL中的端口号。
需要注意的是,有些情况下客户端的真实IP地址可能会被伪造或篡改,例如使用代理服务器访问时,此时需要对IP地址进行判断和过滤。可以通过X-Forwarded-For等HTTP请求头信息来获取客户端的真实IP地址。例如:
String clientIP = request.getHeader("X-Forwarded-For");
一般来说,如果X-Forwarded-For头不为空,那么它的第一个值就是真实的客户端IP地址,否则应该使用getRemoteAddr()方法获取IP地址。