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) - 主机容器

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


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

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

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

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

相关推荐
suuijbd17 分钟前
SpringCloud+Netty集群即时通讯项目
spring boot·分布式·spring cloud·java-rabbitmq·java-zookeeper
陈果然DeepVersion1 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
KYGALYX1 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
余—笙2 小时前
Linux(docker)安装搭建CuteHttpFileServer/chfs文件共享服务器
linux·服务器·docker
但要及时清醒2 小时前
ArrayList和LinkedList
java·开发语言
lang201509282 小时前
Linux高效备份:tar与gzip完全指南
linux·运维·服务器
IDOlaoluo2 小时前
OceanBase all-in-one 4.2.0.0 安装教程(CentOS 7/EL7 一键部署详细步骤)
linux·centos·oceanbase
一叶飘零_sweeeet2 小时前
从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
java·junit
摇滚侠2 小时前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记