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

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


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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03 HAL库下UART的使用

引言: 需要使用到的uart调试工具在文章最后的资料里面 题外话:uart和usart的区别 UART(Universal Asynchronous Receiver/Transmitter)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter)…

获取Windows10系统原始安装日期

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 目标 获取Windows10系统最原始的安装日期;例如:刚买电脑时安装系统的时间。 步骤 第一步,请打开PowerShell,单击Windows P…

评价类问题:层次分析法

引言:打分法 一、解决评价类问题的三个方面 二、如何寻找评价准则 三、如何确定权重 (1)分而治之的思想 (2) 层次分析法思想: 指标重要性(满意程度) 判断矩阵(正反矩…

分布式【4. 什么是 CAP?】

什么是 CAP? C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。 A 代表 Availability,可用性,是指系统提…

数据结构与算法笔记

数据结构: 就是指一组数据的存储结构 算法: 就是操作数据的一组方法 数据结构和算法 两者关系 数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。 数据结构是静态的,它只是组织数据的一…

Kubernetes网络-VXLAN

一. 网络基础 1. 计算机网络的分层 如今连接方式也越来也丰富,网线、WiFi、蓝牙、光纤,甚至我们普通的电线、照明所用的灯光,都可以作为接入网络的介质。如此庞大的网络,丰富多样的设备,计算机网络技术能把它们统一起…

认识计算机网络——计算机网络的组成

计算机网络是由多个计算机和网络设备组成的系统,通过通信协议实现数据传输和信息交换。它是现代社会信息技术的重要支撑,广泛应用于各个领域。本文将介绍计算机网络的主要组成部分,包括硬件设备、软件协议和网络服务。 一、硬件设备 计算机网…

46、激活函数 - Relu 激活

本节介绍一个在神经网络中非常常见的激活函数 - Relu 激活函数。 什么是ReLU激活函数 ReLU 英文名为 Rectified Linear Unit,又称修正线性单元,是一种简单但很有效的激活函数,它的定义如下: 即当输入 x 大于零时,输出等于他自己;当输入小于等于零时,输出为零,下面是re…

C++继承与派生——(8)多继承

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 苦难和幸福一样,都是生命盛…

【多传感器融合导航论文阅读】

多传感器融合导航论文积累 知识点总结因子图一致因子图 文献阅读笔记[IF 18.6] 知识点总结 因子图 Factor Graph 是概率图的一种,是对函数因子分解的表示图,一般内含两种节点,变量节点和函数节点。 因子图存在着:两类节点&#…

主浏览器优化之路1——你现在在用的是什么浏览器?Edge?谷歌?火狐?360!?

上一世,我的浏览器之路 引言为什么要用两个浏览器为什么一定要放弃火狐结尾给大家一个猜数字小游戏(测运气) 引言 小时候,我一开始上网的浏览器是2345王牌浏览器吧, 因为上面集成了很多网站,我记得上面有7…

<Icon-ResizER>support

If you get any questions in using app, email me caohechunhotmail.com.

vscode调试 反汇编c/c++ 查看汇编代码gdb/lldb

先看下流程! 先看下流程! 有问题请留言! 文章目录 必备F5开启调试左侧侧边栏->确保打开回调栈右键函数栈->查看反汇编 方法二:手动输入命令查看 必备 使用c/c 插件,这应该是必备的。 F5开启调试 左侧侧边栏-&…

[Verilog] 加法器实现

1. 4位的加法器 先来一个最基本的的Verilog加法器 设计代码 module adder_4bit (input [3:0] a, b, output [3:0] sum, output carry);assign

react18框架笔记

React React 是 facebook 出的一款针对视图层的库(library)。它是基于单向数据流思想开发的,主要的一个功能就是针对视图显示,让我们把一个项目拆分成一个一个组件进行开发维护。 官网 目前我们讲的 react 是基于 18.2 的版本。react 每一个版本更新之…

Java多线程<二>多线程经典场景

leetcode 多线程刷题 上锁上一次,还是上多次? 同步的顺序。 1. 交替打印字符 使用sychronize同步锁使用lock锁使用concurrent的默认机制使用volitale关键字 Thread.sleep() / Thread.yield机制使用automic原子类 方式1 :使用互斥访问st…

window 服务使用powershell 调用office进行文档内存不够的处理

在项目中为了实现office文件的预览,专门做了个service进行文件的定时转换。 在测试时发现,服务程序 双击执行的时候,文件的转换一切正常,但是当把服务程序安装为服务的时候吗,就会出现如下错误: $PowerPo…

Matlab figure窗口最大化 窗口全屏 图表窗口最大化

我有一个项目,需要把多个数据文件画成的曲线一个个保存为图片,然后再进行集中对比分析。程序运行后,打开目录下保存的图片,发现图片的尺寸都很小,画质也不清晰,后来发现原来matlab显示图片的时候&#xff0…

UCi数据集处理技巧记录

如何起步使用UCI数据集 这里记录一下如何把带分号的数据变成经常使用的csv形式。这里使用wine的例子 https://archive.ics.uci.edu/dataset/186/winequality 原始数据 Wine UCI数据操作 这种带分号的使用python的不好阅读,可以尝试以下步骤: 转变为t…

2023-12-20 LeetCode每日一题(判别首字母缩略词)

2023-12-20每日一题 一、题目编号 2828. 判别首字母缩略词二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符…