springboot如何获取请求者的ip地址

 更新时间:2024年07月18日 11:32:26   作者:禾火.  
在Spring框架中,可以使用拦截器(Interceptor)来监听每个控制器(Controller)的请求,并记录请求者的IP地址,这篇文章主要介绍了springboot如何获取请求者的ip地址,需要的朋友可以参考下

在Spring框架中,可以使用拦截器(Interceptor)来监听每个控制器(Controller)的请求,并记录请求者的IP地址。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IpLoggingInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在请求处理之前调用,可以记录IP地址等信息
        String clientIpAddress = getClientIpAddress(request);
        System.out.println("IP地址:" + clientIpAddress);
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // 在请求处理之后调用,但在视图渲染之前
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 在整个请求完成后调用,可以进行一些清理工作
    }
    private String getClientIpAddress(HttpServletRequest request) {
        String ipAddress = request.getHeader("X-Forwarded-For");
        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getRemoteAddr();
        }
        return ipAddress;
    }
}

上述代码中的 IpLoggingInterceptor 类实现了 HandlerInterceptor 接口,其中的 preHandle 方法在请求处理之前被调用。在该方法中,我们获取了请求者的IP地址,并进行了简单的打印。可以根据需要,将这些信息记录到日志文件或其他存储设备中。

接下来,需要将这个拦截器注册到Spring应用中。在Spring Boot项目中,可以使用WebMvcConfigurer来注册拦截器。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new IpLoggingInterceptor());
    }
}

到此这篇关于springboot如何获取请求者的ip地址的文章就介绍到这了,更多相关springboot请求者的ip地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java执行JS脚本工具

    Java执行JS脚本工具

    今天小编就为大家分享一篇关于Java执行JS脚本工具,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • SpringBoot ThreadLocal 简单介绍及使用详解

    SpringBoot ThreadLocal 简单介绍及使用详解

    ThreadLocal 叫做线程变量,意思是 ThreadLocal 中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量,这篇文章主要介绍了SpringBoot ThreadLocal 的详解,需要的朋友可以参考下
    2024-01-01
  • OpenCV实现普通阈值

    OpenCV实现普通阈值

    这篇文章主要为大家详细介绍了OpenCV实现普通阈值,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java创建二叉搜索树,实现搜索,插入,删除的操作实例

    Java创建二叉搜索树,实现搜索,插入,删除的操作实例

    下面小编就为大家分享一篇Java创建二叉搜索树,实现搜索,插入,删除的操作实例,具有很好的参考价值,希望对大家有所帮助
    2017-12-12
  • Java中ThreadLocal 导致内存 OOM 的原因分析

    Java中ThreadLocal 导致内存 OOM 的原因分析

    这篇文章主要介绍了Java中ThreadLocal导致内存OOM的原因分析,文章基于Java的相关内容展开ThreadLocal导致内存OOM的原因分析,需要的小伙v阿布可以参考一下
    2022-05-05
  • 深入了解Java包与访问控制权限

    深入了解Java包与访问控制权限

    这篇文章主要带你掌握Java中包的定义及使用以及Java中的4种访问权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • kafka内外网访问配置方式

    kafka内外网访问配置方式

    这篇文章主要介绍了kafka内外网访问配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java中final与finally的使用介绍

    java中final与finally的使用介绍

    本篇文章介绍了,在java中final与finally的使用。需要的朋友参考下
    2013-04-04
  • SpringBoot配置动态数据源的实战详解

    SpringBoot配置动态数据源的实战详解

    Spring对数据源的管理类似于策略模式,不懂策略模式也没关系,其实就是有一个全局的键值对,类型是Map<String, DataSource>,当JDBC操作数据库之时,会根据不同的key值选择不同的数据源,本文介绍了SpringBoot配置动态数据源的方法,需要的朋友可以参考下
    2024-08-08
  • Java集合系列之LinkedList源码分析

    Java集合系列之LinkedList源码分析

    这篇文章主要为大家详细介绍了Java集合系列之LinkedList源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论