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.mzph.cn/news/610559.shtml

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

相关文章

springboot集成jsp

首先pom中引入依赖包 <!--引入servlet--> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId> </dependency> <!--引入jstl标签库--> <dependency><groupId>javax.servle…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷③

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 模块一 …

springboot2.7集成sharding-jdbc4.1.1实现业务分表

1、引入maven <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency> 2、基本代码示例 基本逻辑&#xff1a;利用数…

软件测试|Django 入门:构建Python Web应用的全面指南

引言 Django 是一个强大的Python Web框架&#xff0c;它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能&#xff0c;帮助您从零开始构建一个简单的Web应用。 什么是Django&#xff1f; Django 是一个基于MVC&#xff08;模型-视图-控制器&a…

A preview error may have occurred. Switch to the Log tab to view details.

记录一下当时刚开始学习鸿蒙开发犯的错误 UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题 并伴随标题错误 我们跳转页面需要进行注册 路由表路径&#xff1a; entry > src > main > resources > base > profile > main_pages.json 或者是页面…

Docker(网络,网络通信,资源控制)

docker网络 网络实现原理 Docker 网络是指由 Docker 为应用程序创建的虚拟环境的一部分&#xff0c;它允许应用程序从宿主机操作系统的网络环境中独立出来&#xff0c;形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络相关的模块。Docker 的网络功能…

鸿鹄电子招投标系统:企业战略布局下的采购寻源解决方案

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

面试宝典进阶之Java线程面试题

T1、【初级】线程和进程有什么区别&#xff1f; &#xff08;1&#xff09;线程是CPU调度的最小单位&#xff0c;进程是计算分配资源的最小单位。 &#xff08;2&#xff09;一个进程至少要有一个线程。 &#xff08;3&#xff09;进程之间的内存是隔离的&#xff0c;而同一个…

Untiy HTC Vive VRTK 开发记录

目录 一.概述 二.功能实现 1.模型抓取 1&#xff09;基础抓取脚本 2&#xff09;抓取物体在手柄上的角度 2.模型放置区域高亮并吸附 1&#xff09;VRTK_SnapDropZone 2&#xff09;VRTK_PolicyList 3&#xff09;VRTK_SnapDropZone_UnityEvents 3.交互滑动条 4.交互旋…

秋招阿里巴巴java笔试试题-精

一、单项选择题 1、以下函数的时间复杂度是 &#xff08; &#xff09; 1 2 3 4 5 6 7 8 9 void func(int x,int y, int z){ if(x<0) printf("%d, %d\n", y, z); else { func(x-1,y1,z); func(x-1,y,z1); } } A.O(x*y*z) B.O(x^2*y^2) C.O(2^x) D.O(2^x*…

coredump+gdb调试

1、什么是coredump Coredump&#xff08;核心转储&#xff09;是操作系统在程序异常终止&#xff08;例如由于段错误或其他严重错误&#xff09;时创建的一种文件。这个文件包含了程序崩溃时刻进程的内存镜像&#xff0c;通常还包括程序计数器、寄存器内容和堆栈内存等信息&am…

nginx 二级目录部署vue项目

主要是vue项目得更改资源路径 通过.env环境变量来设置 修改项目的基础路径&#xff0c;我的是vite项目&#xff0c;所以我要在vite.config.js中修改base属性 为 ‘/threejs/’修改vue-router的base路径为’/threejs’ 1.vite项目的基础路径 getEnvConfig 方法是封装的获取环境…

【Axure视频教程】可视化饼图

今天教大家在Axure制作可视化饼图的原型模板&#xff0c;鼠标移入饼图对应的扇形区域&#xff0c;该区域的扇形会高亮变色&#xff0c;而且显示该区域对应的数据&#xff0c;那这个模板是用Axure的原生元件制作的&#xff0c;不需要联网或者调用接口&#xff0c;通过基础元件和…

算法篇:动态规划I

声明&#xff1a;若未特殊标出&#xff0c;则默认是leedcode原题。 1、1137.第N个泰波那契数列&#xff1a; ①状态表示&#xff1a;dp[i]表示&#xff1a;第i个泰波那契数的值。 ②状态转移方程&#xff1a;以i位置的状态&#xff0c;最近的一步&#xff0c;来划分问题&#…

CH09_避免浪费

Flyweight模式 享元模式&#xff08;Flyweight&#xff09;&#xff0c;运用共享技术有效地支持大量细粒度的对象。 类图 说明 Flyweight&#xff08;轻量级&#xff09; 按照通常方式编写程序会导致程序变重&#xff0c;所以如果能够共享实例会比较好&#xff0c;而Flyweigh…

idea右上角浏览器图标没有idea内部浏览器怎么显示

idea右上角浏览器图标没有idea内部浏览器怎么显示 file -> settings -> tools -> web brosers 选择需要的浏览器&#xff0c;勾选上展示到编辑器中 打开上图的Built-in Preview&#xff0c;就会显示idea标志的内部显示了&#xff01;&#xff01;&#xff01;

UWB 技术及应用

超宽带技术为工业自动化提供独特优势&#xff0c;是首要的室内定位技术。 UWB 因其相对于 RFID、BLE 或 WiFi 等同类技术的众多优势而被认为是室内定位技术的黄金标准。它是基于位置的自动化的理想解决方案。 UWB 结合了短光速脉冲&#xff0c;可在宽带宽上精确测量信号到达时…

Go语言的编译过程

简介 Go 语言和Java语言一样都是一门需要编译才能运行的编程语言&#xff0c;也就是说代码在运行之前需要通过编译器生成二进制机器码。 Go 语言编译器的源代码在 src/cmd/compile 目录中&#xff0c;目录下的文件共同组成了 Go 语言的编译器&#xff0c;而编译过程是一个多阶段…

错误0x80070091(目录不是空的) 解决方案

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读问题产生&#xff1a;解决方案&#xff1a;方法一&#xff1a;方法二&#x…

Linux下进程控制

文章目录 创建进程fork创建进程fork返回值写诗拷贝fork常规用法fork失败的原因 进程终止进程正常终止查看进程退出码_exit函数exit函数exit 和 _exit 的区别return退出 进程等待进程等待的方式wait方法(系统调用)waitpid方法(系统调用) WEXITSTATUS 和 WIFEXITED阻塞等待和非阻…