获取电脑ip地址的代码工具类

获取ip地址的工具类

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class IPUtils {
	private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
	public static String getIpAddr() {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		String ip = null;
		try {
			ip = request.getHeader("x-forwarded-for");
					if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
						ip = request.getHeader("Proxy-Client-IP");
					}
					if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
						ip = request.getHeader("WL-Proxy-Client-IP");
					}
					if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
						ip = request.getHeader("HTTP_CLIENT_IP");
					}
					if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
						ip = request.getHeader("HTTP_X_FORWARDED_FOR");
					}
					if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
						ip = request.getRemoteAddr();
					}
		} catch (Exception e) {
			logger.error("IPUtils ERROR ", e);
		}
		return ip;
	}
}

热门文章

暂无图片
编程学习 ·

读取csv文件,逐行写入txt

import csv #加载csv包便于读取csv文件x, y = [], [] csv_file = open(G:/竞赛/datafountain/O2O商铺食品安全相关评论发现/rnn_cnn/data/train.csv,encoding=utf-8) #打开csv文件 next(csv_file) csv_reader_lines = csv.reader(csv_file) #逐行读取csv文件 for one_l…
暂无图片
编程学习 ·

dnf强化系统实测 java代码

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;/*** dnf强化系统实测*/ public class Qianghua {public static void main(String[] args) throws IOException {//手动强化//manualQianghua();//自动强化autoQianghua(0,16);}…
暂无图片
编程学习 ·

java.lang.UnsupportedOperationException异常处理

今天写代码的时候遇到的,原因是因为使用Arrays.asList()将数组转为list之后,想调用add方法增加元素时的异常,后来查了资料才发现猫腻 在Arrays中有一个方法Arrays.asList(),这个平常我们都用作数组转List的,但是这个方法转出来的List是无法进行add/remove操作的,原因是由…
暂无图片
编程学习 ·

mongodb编译安装

CentOS7 编译安装 Mongodb (实测 笔记 Centos 7.0 + Mongodb 2.6.6) 环境:系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡)系统版本:CentOS-7.0-1406-x86_64-DVD.iso安装步骤:1.准备1.1 显示系统版本 [root@centos ~]# cat /etc/redhat-release CentOS Linux releas…
暂无图片
编程学习 ·

[Java]多线程与并发

文章目录1.进程与线程1.1 进程1.2 进程的状态1.3 线程2.线程的基本使用3.线程休眠4.join与中断线程5.守护线程与yield7.线程同步7.1 多线程共享数据7.2 线程同步7.3 同步准则8.死锁9.生产者与消费者案例10.线程的生命周期11.线程池 1.进程与线程 1.1 进程 程序是指令和数据的有…
暂无图片
中恒嘉业 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
cgfy ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
coreui ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
建站日记 ·

STL Practice —— 【map (1)】

Description 给出学生姓名和分数&#xff0c;要求你输入姓名查询分数。 Input 输入包含T组测试数据。 开头是一个正整数T (0<T<10)&#xff0c;为测试数据数量。 对于每组测试数据&#xff0c;第一行是一个正整数N (0<N<100000)。 接下来有N行&#xff0c;每行包…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
mfbz ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
珊珊日记 ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息&#xff0c;消息是不定长&#xff0c;首先所有信息先放入 Commitlog中&#xff0c;每一条消息放入Commitlog的时候都需要上锁&#xff0c;确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…