Spring Boot程序输出远程访问IP

   欢迎来到我的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)

Spring Boot程序输出远程访问IP_第1张图片

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

         打开文件进行查看

 Spring Boot程序输出远程访问IP_第2张图片

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

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

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

Spring Boot程序输出远程访问IP_第3张图片

Spring Boot程序输出远程访问IP_第4张图片

Spring Boot程序输出远程访问IP_第5张图片

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


 本期的博客分享到此结束

各位老铁慢慢消化

下期博客博主会带来新货

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

Spring Boot程序输出远程访问IP_第6张图片

你可能感兴趣的:(Spring,spring,boot,java,linux)