Spring Boot程序输出远程访问IP

发布时间:2023年12月28日

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

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

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

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


前言

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

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

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

输出远程访问 IP 地址常见的用途
用途说明
安全审计记录远程访问 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;
}

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

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;
    }
}

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

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;
}

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

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配置。

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

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


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

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

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

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

文章来源:https://blog.csdn.net/weixin_74352229/article/details/135263973
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。