Spring Boot程序输出远程访问IP

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringBoot开发》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁


前言

今天给老铁们带来的是一个知识点的扩展,可将该知识点运用到我们的项目之后,可以监听到我们的项目

一、为什么要输出远程访问IP

输出远程访问IP的作用有以下几点:

|------------|-------------------------------------------------------------------------------|
| 用途 | 说明 |
| 安全审计 | 记录远程访问 IP 可以用于安全审计,跟踪系统中的访问活动。在出现安全事件或攻击时,日志中的 IP 地址信息可以帮助确定攻击来源,进而采取相应的安全措施。 |
| 访问控制 | 基于 IP 地址的访问控制是一种常见的安全策略。通过记录远程访问 IP,系统可以实施白名单或黑名单策略,允许或拒绝特定 IP 地址的访问。 |
| 性能分析 | 获取远程访问 IP 还有助于进行性能分析。在分布式系统中,了解来自不同 IP 地址的请求量和响应时间等信息可以帮助优化系统性能。 |
| 地理位置信息 | IP 地址可以用于获取大致的地理位置信息。虽然不是完全准确,但在一些应用场景下,了解用户的大致地理位置可以帮助提供更个性化的服务。 |
| 用户追踪 | 在某些应用中,输出远程访问 IP 可以用于用户追踪和分析。这对于了解用户行为、推荐内容或定制用户体验等方面是有帮助的。 |
[输出远程访问 IP 地址常见的用途]

需要注意的是,在某些情况下,特别是在涉及用户隐私的场景中,处理和记录 IP 地址可能受到法规的限制,因此在实施时需要谨慎,并确保符合相关隐私法规的规定。

二、输出远程访问IP的方式

1. 通过HttpServletRequest对象获取远程访问IP

java 复制代码
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;
}

这个方法首先尝试从请求头中获取 "X-FORWARDED-FOR" 的值,这是常用于代理服务器转发客户端真实IP地址的头信息。如果这个头信息不存在,就使用 来获取远程IP地址。request.getRemoteAddr()

2. 可以通过注入HttpServletRequest对象,然后调用上述方法来获取远程IP地址

java 复制代码
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;
    }
}

在这个例子中,当访问 "/getRemoteIP" 路径时,会返回客户端的远程IP地址。需要注意的是,如果你的应用部署在代理服务器(如Nginx、Apache)后面,代理服务器可能会修改请求头,需要查看代理服务器的配置来获取真实的远程IP地址。在Web开发中,你可以通过以下方法输出远程访问 IP 地址,具体实现可能会依赖于你使用的编程语言和框架。

3. 在Java中使用Servlet API(例如,Spring框架)

java 复制代码
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;
}

在Spring MVC的控制器中,你可以注入对象来调用上述方法:HttpServletRequest

java 复制代码
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

首先我们在我们的yml文件或者properties的文件中进行对Server配置。

XML 复制代码
server:
    port: 8080
    tomcat:
      accesslog:
#          开启远程访问日志
          enabled: true
#          表示将访问日主输出到D盘的log目录下
          directory: D:/log
#                    表示以指定的格式输出日志
          pattern: \%t \[%I\] \%{X-Forwarded-For}i %A %r %s (%D ms)

配置成功之后我们运行项目,然后进行访问,我们就会在我们指定的文件夹下生成一个文件,对其访问的Ip、路径、以及时间进行记录。

打开文件进行查看

当然想显示其他的内容也可以进行设置修改。

查看下方网址进行对yml文件中的pattern的属性修改

Apache Tomcat 8 配置参考 (8.5.40) - 主机容器

根据自身的需求进行修改设置


🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

相关推荐
小冉在学习10 分钟前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论
Ven%26 分钟前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
代码之光_19801 小时前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi1 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
StayInLove1 小时前
G1垃圾回收器日志详解
java·开发语言
TeYiToKu1 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
对许1 小时前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
dsywws1 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化