首页 > 其他分享 >spring boot 获取客户端ip信息

spring boot 获取客户端ip信息

时间:2024-11-27 09:44:46浏览次数:6  
标签:spring ip req boot request length IP null ipAddress

增加顶级过滤器

`@javax.servlet.annotation.WebFilter(filterName = "sessionFilter", urlPatterns = "/webSocket/*")
@Order(1)
@Slf4j
public class WebFilter implements Filter {

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
	HttpServletRequest req = (HttpServletRequest) servletRequest;
	HttpSession session = req.getSession();
	session.setAttribute("user_ip", req.getRemoteHost());
	log.info("user_ip===={}",req.getRemoteHost());
	filterChain.doFilter(servletRequest, servletResponse);
}
public 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="";
	}
	return ipAddress;
}

}`
在启动类上,需要加上@ServletComponentScan 用来注册这个Filter,直接使用@Component会导致urlPatterns 失效

标签:spring,ip,req,boot,request,length,IP,null,ipAddress
From: https://www.cnblogs.com/hyiam/p/18571595

相关文章

  • SpringBoot源码-spring boot启动时配置properties和yml文件解析过程以及spring.profil
    1.当我们启动一个SpringBoot项目的时候,入口程序就是main方法,而在main方法中就执行了一个run方法。@SpringBootApplicationpublicclassStartApp{ publicstaticvoidmain(String[]args){ //test SpringApplication.run(StartApp.class); }} publicstati......
  • Spring Boot 3.4 正式发布,王炸级更新!
    大家好,我是R哥。最新消息,SpringBoot一次性发布了6个版本:3.4.03.3.63.2.123.1.143.0.182.7.23SpringBoot3.4正式发布了,3.2.x在前几天也停止维护了,很神奇的是,3.1.x及以下的停更版本居然也发布bug更新包了。最新的支持版本如下:从路线图可以看到每个版本的终......
  • 基于SpringBoot的宠物用品商城系统
    引言  随着互联网技术的飞速发展和电子商务的普及,越来越多的消费者选择在线购物。宠物用品市场作为其中的一个细分领域,近年来也呈现出快速增长的趋势。养宠人群的增加以及对宠物生活质量要求的提高,推动了宠物用品市场的繁荣。然而,传统的宠物用品销售模式存在诸多问题,如信......
  • noip模拟21
    A打印一眼题。首先一个很简单的思路就是维护一个打印机的优先队列,按照打印机的时间排序。但是如果现在可用的打印机有很多,你需要找到一个id最小的,这样维护就得把所有时间戳小于当前\(t_i\)的打印机全部弹出,统计,再加回来。有60分。然后就能想到把时间戳小于等于当前的......
  • 第十章 JavaScript的应用
    10.1JavaScript概述10.1.1JavaScript简介JavaScript是一种基于对象(0bject)和事件驱动(EventDriven)并具有安全性能的脚本语言,能够与HTML(超文本标记语言)、Java语言一起在Web页面中与Web客户交互它无须经过先将数据传给服务器端(Server)、再传回来的过程,而直接可以由客户......
  • Spring:Spring事务管理讲解
    事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或**业务层**保障一系列的数据库操作同成功同失败1,事务介绍Spring为了管理事务,提供了一个平台事务管理器PlatformTransactionManagercommit是用来提交事务,rollback是用来回滚事务。PlatformT......
  • Spring Boot 3.4 正式发布,结构化日志!
    1从SpringBoot3.3升级到3.41.1RestClient和RestTemplate新增对RestClient和RestTemplate自动配置的支持,可用ReactorNetty的HttpClient或JDK的HttpClient。支持的客户端优先级:ApacheHTTPComponents(HttpComponentsClientHttpRequestFactory)JettyCli......
  • JavaScript基础语法
    一.数据类型1.基本类型数字整数小数字符串'' ""都可以布尔类型vard=true;只需要用var声明不需要在前面声明数据类型打印出来undefined说明声明一个变量但没有赋值null涉及到一个量但是这个量是空说明没有声明2.复合类型数组数组通过下标访问arr.length获......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现十
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统的拍卖......
  • 基于SpringBoot+Vue的高校迎新管理系统
    感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人2025最新毕业设计项目推荐-SSM篇2025最新毕业设计项目推荐-SpringBoot篇2025最新毕业设计项目推荐-小程序、uniapp篇-CSDN博客Java精品毕设实战案例推荐​高......