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中Spring事务失效的8个常见案例和解决方案

    java中Spring事务失效的8个常见案例和解决方案

    本文分析了8种Spring事务失效问题及解决方案,涵盖注解应用、方法调用、异常处理、数据库支持、传播行为、类管理与事务管理器配置等,强调正确配置对数据一致性的重要性
    2025-06-06
  • 多个版本JAVA切换的简单步骤记录

    多个版本JAVA切换的简单步骤记录

    在工作中或者学习过程中,有一些特殊情况我们需要来切换java版本来做比较,比如一些新特性等等的相关资料,这篇文章主要介绍了多个版本JAVA切换的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    这篇文章主要介绍了Java并发系列之JUC中的Lock锁与synchronized同步代码块,简单介绍了lock锁及锁的底层知识,结合案例给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • springtask 的使用方法和 cron 表达式解析

    springtask 的使用方法和 cron 表达式解析

    这篇文章主要介绍了springtask 的使用方法和 cron 表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 详解Jackson的基本用法

    详解Jackson的基本用法

    Java生态圈中有很多处理JSON和XML格式化的类库,Jackson是其中比较著名的一个。虽然JDK自带了XML处理类库,但是相对来说比较低级,使用本文介绍的Jackson等高级类库处理起来会方便很多
    2021-06-06
  • springboot 如何添加webapp文件夹

    springboot 如何添加webapp文件夹

    这篇文章主要介绍了springboot 如何添加webapp文件夹,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot事务源码从注解到数据库的全解析

    SpringBoot事务源码从注解到数据库的全解析

    本文深度解析SpringBoot事务源码:从@Transactional注解触发AOP代理,到TransactionInterceptor拦截,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-03-03
  • 在Windows上设置JAVA_HOME环境变量方式

    在Windows上设置JAVA_HOME环境变量方式

    在Windows上设置JAVA_HOME环境变量,以便管理和使用JDK,同时对开发工具和应用至关重要,本文详细介绍了如何设置JAVA_HOME环境变量,包括下载JDK、查找安装路径、设置JAVA_HOME和Path环境变量的步骤
    2026-05-05
  • Java中\n和\r区别

    Java中\n和\r区别

    本文主要介绍了Java中\n和\r区别。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Android入门简单实例

    Android入门简单实例

    这篇文章主要介绍了Android入门简单实例,对于初学Android的朋友有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08

最新评论