Java--业务场景:获取请求的ip属地信息

文章目录

      • 前言
      • 步骤
        • 在pom文件中引入下列依赖
        • IpUtil工具类
        • 在Controller层编写接口,获取请求的IP属地
        • 测试接口
      • IpInfo类中的方法

前言

  • 很多时候,项目里需要展示用户的IP属地信息,所以这篇文章就记录一下如何在Java Spring boot项目里获取请求的IP属地

步骤

在pom文件中引入下列依赖
        <!--   该依赖可以根据ip地址获取该ip相关的信息     --><dependency><groupId>net.dreamlu</groupId><artifactId>mica-ip2region</artifactId><version>2.5.6</version></dependency>
IpUtil工具类
  • 该工具类对HttpServletRequest解析,得到ip地址字符串
public class IpUtil {/*** 获取客户端ip** @param request* @return*/public static String getIp(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {// 多次反向代理后会有多个ip值,第一个ip才是真实ipif (ip.indexOf(",") != -1) {ip = ip.split(",")[0];}}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return ip;}
}
在Controller层编写接口,获取请求的IP属地
@RestController
@RequestMapping("/part/util")
@Api(tags = "工具类", value = "UtilController")
public class UtilController {@Autowiredprivate Ip2regionSearcher ip2regionSearcher; // 核心处理类@ApiOperation(value = "获取ip属地")@GetMapping("/ipCity")public String getipCity(HttpServletRequest request) {String ip = IpUtil.getIp(request);IpInfo ipInfo = ip2regionSearcher.memorySearch(ip);String city = ipInfo.getCity();return city;}
}
测试接口
  • 这里我的请求是内网ip,所以返回的结果是“内网ip”,有点像废话hhh。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

IpInfo类中的方法

IpInfo

简单介绍一下几个常见的方法

ipInfo.getCountry(); // 国家中文名称
ipInfo.getProvince(); // 中国省份中文名称
ipInfo.getAddress(); // 详细地址
ipInfo.getIsp(); // 互联网服务提供商
ipInfo.isOverseas(); // 是否是国外
ipInfo.getLat(); // 纬度
ipInfo.getLng(); // 经度

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

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

相关文章

领英Linkedin自动跳转中国站点的解决方案

linkedin放弃中国市场后&#xff0c;在国内打开linkedin.com&#xff0c;会自动跳转到 linkedin.cn&#xff0c;无法与国际友人在同一个平台上联系。 按照搜到的方法尝试解决&#xff0c;包括修改浏览器默认语言、清除浏览数据、使用软路由上的插件给 linkedin.com设置从国外线…

手机直连卫星及NTN简介

一、手机直连卫星的发展现状 近日&#xff0c;华为推出了支持北斗卫星短报文的Mate 50旗舰机、P60系列&#xff0c;苹果也跟Globalstar&#xff08;全球星&#xff09;合作推出了支持卫星求救的iPhone14&#xff0c;最亮眼的还是华为的。这几款产品揭开了卫星通信探索消费领域…

el-table实现多行合并的效果,并可编辑单元格

背景 数据为数组包对象&#xff0c;对象里面有属性值是数组&#xff1b;无需处理数据&#xff0c;直接使用el-table包el-table的方法&#xff0c;通过修改el-table的样式直接实现多行合并的效果 html代码 <template><div><el-table size"mini" :d…

基于机器视觉的车牌检测-字符识别

一般步骤 字符识别常用的有以下四类&#xff1a; 第一类&#xff1a;结构识别方法。 第二类&#xff1a;统计识别方法。 第三类&#xff1a;BP神经网络方法。 第四类&#xff1a;模板匹配方法。 模板匹配方法是最常用的方法。 主要内容 模板匹配的车牌识别包括以下几点主…

数据库02-07 存储

计算机存储系统&#xff1a; 02.磁道存储

1.4.1机器学习——梯度下降+α学习率大小判定

1.4.1梯度下降 4.1、梯度下降的概念 ※【总结一句话】&#xff1a;系统通过自动的调节参数w和b的值&#xff0c;得到最小的损失函数值J。 如下&#xff1a;是梯度下降的概念图。 我们有一个损失函数 J(w,b)&#xff0c;包含两个参数w和b&#xff08;你可以想象成J(w,b) w*x…

谷歌浏览器打不开设置

场景&#xff1a;谷歌浏览器页面空白&#xff0c;并且点击设置没有反应 忘记我是在哪找的解决方案了&#xff0c;先留个记号在这&#xff0c;方便下次查阅

Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)

CSDN 成就一亿技术人&#xff01; VSFTPD 实现客户端和服务器之间传输文件 CSDN 成就一亿技术人&#xff01; 目录 什么是VSFTPD&#xff1f; VSFTPD 的特点和功能 1. 设置和使用FTP服务器的步骤 1. 下载vsftpd包 2. 启动服务 开机自启 3. 关闭防火墙 4. 配置vsftpd服…

【实用技巧】Windows电脑向iPhone或iPad传输视频方法2:有线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频&#xff0c;以 iPhone 为例&#xff0c;iPad的操作方法类似&#xff0c;本文不作赘述。 二、所需原材料 Windows 电脑&#xff08;有 USB-A 或 USB-C 接口&#xff09;&#xff08;桌面或其它文件夹中…

小型图书借阅管理系统

springbootmybatismysqlthymeleafjquery构建的小型图书借阅管理系统后端 1.springboot 2.mybatis数据库 1.mysql前端 1.jquery 2.jquery-validate 3.htmlcss

UE5 C++(十五)— TimerHandle(定时器)的使用

文章目录 设置定时器声明FTimerHandle定义执行函数设置定时器 清除定时器 定时器&#xff08;Timer&#xff09; 可用于执行延迟类型的操作&#xff0c;或让某些操作在一段时间内重复执行。 设置定时器 定时器的设置只需三步即可完成&#xff1a;声明定时器句柄 FTimerHandle…

51单片机介绍

1 单片机简介 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU 内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处理&#xff08;依靠CPU&#xff09;和硬件设…