Spring Boot获取登录用户IP

2023-10-26

控制器方法:

@RequestMapping(value = "/getIp", method = RequestMethod.POST)
    @ResponseBody
    public String getIp(HttpServletRequest request) {
        return IpUtil.getIpAddr(request);
    }
 

工具类方法:

public class IpUtil {
    public static String getIpAddr(HttpServletRequest request) {
        String ipAddress = null;
        try {
            ipAddress = request.getHeader("x-forwarded-for");
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();
                if (ipAddress.equals("127.0.0.1")) {
                    // 根据网卡取本机配置的IP
                    InetAddress inet = null;
                    try {
                        inet = InetAddress.getLocalHost();
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    }
                    ipAddress = inet.getHostAddress();
                }
            }
            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
                                                                // = 15
                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                }
            }
        } catch (Exception e) {
            ipAddress="";
        }
        // ipAddress = this.getRequest().getRemoteAddr();
        
        return ipAddress;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot获取登录用户IP 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • Java 程序员必须了解的 7 个性能指标

    来源 王韵菲 www evget com article 2015 11 16 22990 html 本文中 小编搜集了7个最有影响的衡量标注 让你可以不依赖日志文件来了解应用程序 现在 让我们看看这些性能指标 并了解如何查看并收集它们 1
  • linux 服务器搭建 elasticsearch(一)

    1 安装java jdk 环境 查看可安装版本 yum y list java 选择一个java版本进行安装 这里我们希望安装java1 8 因为我们的机器是64位的 所以选择安装java 1 8 0 openjdk devel x86 6
  • Linux编程复习(3)——信号与中断

    信号是响应某些状况而产生的事件 进程在接收到信号时会采取相应的行动 某些状况就是指某些条件错误 如内存段冲突 浮点处理器错误或者非法指令等 信号是在软件层次上对中断的一种模拟 所以信号也称为是软中断 信号与中断的相似点 1 都采用相同的额异
  • OpencvX.X中Mat与IplImage类型的相互转换

    1 Opencv4 x中Mat与IplImage的转换 1 Mat转IPLImage IplImage img cvIplImage mat 2 IplImage转Mat Mat cvarrToMat const CvArr arr boo
  • 从异步调用返回响应:多语言指南

    Asynchronous调用是现代编程的基础 可以有效地处理可能需要时间的任务 例如网络请求或文件操作 然而 response从这些asynchronous电话中获取信息可能会让新手感到困惑 在本指南中 我们将探讨如何从不同编程语言的异步调
  • 4款堪称神器的电脑黑科技软件,让人相见恨晚

    Syncthing 一款免费的开源跨平台文件同步客户端 服务器工具 支持Linux Windows OSX FreeBSD以及Solaris等系统 具有一个强大的响应式的网页管理界面 能够帮助用户简便地添加 删除和管理通过网络进行同步的文件
  • TX2上如何查看cuda版本

    如果知道安装的路径 一般都是在local下 可以直接查看 nvidia tegra ubuntu cat usr local cuda version txt CUDA Version 9 0 252 能看到机器上的CUDA版本是9 0 2
  • 国家级、省、市专精特新申报条件汇总

    国家级专精特新硬性条件 1 企业成立3年及以上 2 企业从业人员1000人以下或营业收入40000万元以下 3 已认定为省级专精特新 不硬性规定 有优先推荐权 4 截至上年末的近2 年主营业务收入或净利润的平均增长率达到5 以上 企业资产负
  • 构建方便安全的HttpClient工具类

    构建方便安全的HttpClient工具类 前言 开始 引入核心依赖 其它依赖 封装工具类 1 UrlEntity 2 HttpClientException 3 IoUtil 4 UrlUtil 5 SingletonUtil 开始构建 6
  • C语言—随机种子的设定

    计算是CPU和内存进行交互 运算是很快的 打印时CPU 内存和显示器进行交互 运算较慢 计算机在访问输入输出设备的时候 运算速度会大大降低 1 计算 n 的阶乘 int factor int n int result 1 for int i
  • 从gitHub当中更新项目synchronize Update fetch pull 项目的区别

    从gitHub更新项目 马克 to win 马克 java社区 防盗版实名手机尾号 73203 马克 to win 方法一 右击你的项目 team synchronize workspace 这样他就会去gitHub那fetch回最新的版本
  • iOS View Controller 全屏布局

    iOS View Controller 全屏布局 2014 09 08 自 iOS 7 以后苹果开始默认对 View Controller 采用全屏布局 全屏布局的意思就是 View Controller 的 layout 是填满整个屏幕的
  • MySQL——在Linux环境下安装(在线安装)

    MySQL的安装 在线安装 mysql的安装并不是比赛的内容 所以我们用比较方便的在线安装的方法 比起安装 我们更要知道如何去使用 首先看一下自己有没有安装MySQL的服务 或者自己的服务器上有没有自带的MySQL服务 rpe ga gre
  • Adapter理解

    这里也算回顾做Android开发时候遇到的一个问题吧 当时对Android中适配器的使用不是很了解 也不知道每一种适配器的局限性和用法 用的时候出现很多异 所以 适配器就我自己来看 我觉得这是一个非常重要的知识点 Adapter是用来帮助填
  • OpenGL-渲染光照球体

    3 光照 注意 a OpenGL至少会支持8个光源 即GL LIGHT0到GL LIGHT7 但是开启过多的光源会导致程序运行速度下降 b GL AMBIENT GL DIFFUSE GL SPECULAR这三种属性是光源和材质所共有的 如
  • 【华为OD机试真题 JAVA】查找众数及中位数

    JS版 华为OD机试真题 JS 查找众数及中位数 标题 查找众数及中位数 时间限制 1秒 内存限制 262144K 语言限制 不限 1 众数是指一组数据中出现次数量多的那个数 众数可以是多个 2 中位数是指把一组数据从小到大排列 最中间的那
  • python错误:AttributeError: 'list' object has no attribute 'sorted'

    列表学习的错误 AttributeError list object has no attribute sorted 没有注意sort 和sorted 的区别 sort 是方法 sorted 是函数 方法是调用 函数进行数据传递 So 区别
  • Shadow Mapping 的原理与实践

    早在上世纪七十年代末 Williams在他的 Casting Curved Shadows on Curved Surface 一文中提出了名为Shadow Map的阴影生成技术 之后 他人在此基础上针对相关问题做了许多改进 现在 Shad
  • Wireshark分析DHCP

    DHCP DNS和HTTP是3种常见的高层协议 一 动态主机配置协议DHCP 1 DHCP简介 DHCP Dynamic Host Configuration Protocol 动态主机配置协议 是一个应用层协议 当我们将客户主机ip地址设
  • Spring Boot获取登录用户IP

    控制器方法 RequestMapping value getIp method RequestMethod POST ResponseBody public String getIp HttpServletRequest request r