前言
一、为什么要输出远程访问IP
用途 | 说明 |
安全审计 | 记录远程访问 IP 可以用于安全审计,跟踪系统中的访问活动。在出现安全事件或攻击时,日志中的 IP 地址信息可以帮助确定攻击来源,进而采取相应的安全措施。 |
访问控制 | 基于 IP 地址的访问控制是一种常见的安全策略。通过记录远程访问 IP,系统可以实施白名单或黑名单策略,允许或拒绝特定 IP 地址的访问。 |
性能分析 | 获取远程访问 IP 还有助于进行性能分析。在分布式系统中,了解来自不同 IP 地址的请求量和响应时间等信息可以帮助优化系统性能。 |
地理位置信息 | IP 地址可以用于获取大致的地理位置信息。虽然不是完全准确,但在一些应用场景下,了解用户的大致地理位置可以帮助提供更个性化的服务。 |
用户追踪 | 在某些应用中,输出远程访问 IP 可以用于用户追踪和分析。这对于了解用户行为、推荐内容或定制用户体验等方面是有帮助的。 |
二、输出远程访问IP的方式
1. 通过HttpServletRequest对象获取远程访问IP
import javax.servlet.http.HttpServletRequest;
// 在你的控制器或服务类中
public String getRemoteAddress(HttpServletRequest request) {
String remoteAddr = "";
if (request != null) {
remoteAddr = request.getHeader("X-FORWARDED-FOR");
if (remoteAddr == null || "".equals(remoteAddr)) {
remoteAddr = request.getRemoteAddr();
}
}
return remoteAddr;
}
2. 可以通过注入HttpServletRequest对象,然后调用上述方法来获取远程IP地址
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class MyController {
@RequestMapping("/getRemoteIP")
public String getRemoteIP(HttpServletRequest request) {
String remoteIP = getRemoteAddress(request);
return "Remote IP Address: " + remoteIP;
}
}
3. 在Java中使用Servlet API(例如,Spring框架)
import javax.servlet.http.HttpServletRequest;
public String getRemoteAddress(HttpServletRequest request) {
String remoteAddr = "";
if (request != null) {
remoteAddr = request.getHeader("X-FORWARDED-FOR");
if (remoteAddr == null || "".equals(remoteAddr)) {
remoteAddr = request.getRemoteAddr();
}
}
return remoteAddr;
}
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class MyController {
@RequestMapping("/getRemoteIP")
public String getRemoteIP(HttpServletRequest request) {
String remoteIP = getRemoteAddress(request);
return "Remote IP Address: " + remoteIP;
}
}
4. 利用日志文件输出查看监听访问IP
server:
port: 8080
tomcat:
accesslog:
# 开启远程访问日志
enabled: true
# 表示将访问日主输出到D盘的log目录下
directory: D:/log
# 表示以指定的格式输出日志
pattern: \%t \[%I\] \%{X-Forwarded-For}i %A %r %s (%D ms)