`
bugyun
  • 浏览: 559017 次
社区版块
存档分类
最新评论

Spring 获取客户端IP地址

 
阅读更多

            HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

            po.setIp(IpUtil.clientIp(req));

 

IpUtil.java

public class IpUtil {
    private static final Logger logger = LoggerFactory.getLogger(IpUtil.class);

    /**
     * 获取的是本地的IP地址
     *
     * @return
     */
    public static String serviceIp() {
        String result = "";
        try {
            InetAddress address = InetAddress.getLocalHost();
            result = address.getHostAddress();
        } catch (UnknownHostException e) {
            logger.error("------>调用 IpUtil.servicerIp,错误信息如下");
            logger.error(e.getMessage(), e);
        }
        return result;
    }

    /**
     * 获取的是该网站的ip地址,比如我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址
     *
     * @param domain
     * @return
     */
    public static String serviceIp(String domain) {
        String result = "";
        if (ValidatorUtil.isNotNullOrEmpty(domain)) {
            try {
                InetAddress inetAddress = InetAddress.getByName(domain);
                result = inetAddress.getHostAddress();
            } catch (UnknownHostException e) {
                logger.error("------>调用 IpUtil.servicerIp,错误信息如下");
                logger.error(e.getMessage(), e);
            }
        }
        return result;
    }

    /**
     * 根据主机名返回其可能的所有Ip地址
     *
     * @param domain
     * @return
     */
    public static List<String> originalServiceIp(String domain) {
        List<String> result = new ArrayList<>();
        if (ValidatorUtil.isNotNullOrEmpty(domain)) {
            try {
                InetAddress[] addresses = InetAddress.getAllByName(domain);
                for (InetAddress addr : addresses) {
                    result.add(addr.getHostAddress());
                }
            } catch (UnknownHostException e) {
                logger.error("------>调用 IpUtil.originalServicerIp,错误信息如下");
                logger.error(e.getMessage(), e);
            }
        }
        return result;
    }

    /**
     * @param request
     * @return
     * @description: 如果通过了多级反向代理的话,
     * X-Forwarded-For的值并不止一个, 而是一串IP值,
     * 究竟哪个才是真正的用户端的真实IP呢?
     * 答案是取 X-Forwarded-For中第一个非unknown的有效IP字符串。
     */
    public static String clientIp(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

 

<audio controls="controls" style="display: none;"></audio>

分享到:
评论

相关推荐

    IP工具类,通过传入的request获取ip地址(JAVA)

    System.out.println("客户端IP地址为:" + ipAddress); } } ``` 在上述代码中,`HttpServletRequest`的`getRemoteAddr()`方法用于获取客户端的IP地址。然而,如果应用部署在反向代理服务器(如Nginx)后,这个方法...

    java获取客户端IP及IP归属地

    在Java编程中,获取客户端IP地址以及其归属地是一项常见的需求,这主要涉及到网络协议的理解以及第三方库的使用。在Web应用中,服务器通常需要识别来访用户的地理位置信息,以便进行个性化服务、安全控制或者数据...

    spring,获取IP精选.doc

    在 Spring 框架中,获取客户端 IP 地址是一项常见的需求,特别是在日志记录、安全控制或地理位置信息处理等场景。Spring 提供了多种方式来获取请求中的 IP 地址,这通常涉及到 Web 开发环境中的网络通信。 首先,...

    解决spring-boot2.0.6中webflux无法获得请求IP的问题

    在Spring WebFlux 5.0.x版本中,由于其反应式架构的设计,`ServerRequest`并没有直接暴露获取客户端IP的API。这是一个设计决策,因为它鼓励开发者使用更非阻塞的方式来处理请求。而在Spring WebFlux 5.1及更高版本中...

    spring,获取IP.doc

    在 Spring 框架中,获取客户端 IP 地址是一个常见的需求,尤其是在处理网络请求时,我们需要知道请求来源的 IP 地址来实现如日志记录、安全控制等功能。Spring 提供了多种方式来获取请求中的 IP 地址。 首先,我们...

    SpringCloud客户端服务端注册中心完整示例

    服务提供者启动后,会向Eureka Server注册自己的元数据(如服务名、IP地址、端口等),而服务消费者则可以通过Eureka Server查询到服务提供者的信息,从而实现服务之间的调用。 在"eureka-client"中,我们看到了...

    基于Spring Boot框架的知识付费资源管理系统70fc52fbdcc31c97d73e4d3b08ad008e.zip

    基于Spring Boot框架的知识付费资源管理系统 项目简介 ... IP地址获取通过多种方式获取客户端IP地址,支持反向代理环境。 IP过滤实现IP地址的过滤和限制访问功能,保障系统安全。 4. 数据库操作

    关于ip的过滤器 spring security例子

    本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。 首先,我们需要理解Spring Security的基本架构。它是一个多层次的组件模型,其中包括认证、授权和会话管理等核心功能。在...

    根据ip获取当前所在区域地址

    在SpringBoot中,你可以将`GeoLocationService`注入到需要获取地理位置的控制器中,然后通过HTTP请求处理客户端的IP地址: ```java import org.springframework.beans.factory.annotation.Autowired; import org....

    SpringCloud基础教程

    每个微服务启动时,都会向Eureka服务器注册自身的信息,包括服务名、IP地址和端口等。其他服务则通过Eureka获取到服务列表,实现服务之间的互相调用。 2. **Zuul**:作为API网关,Zuul处理所有客户端的请求,实现了...

    springcloud视频学习7

    服务提供者启动时会向Eureka Server注册自身信息,包括服务名、IP地址、端口等,而服务消费者则会在需要调用其他服务时查询Eureka Server获取服务提供者的地址信息。 21.尚硅谷_SpringCloud_EurekaServer服务注册...

    spring boot 防止重复提交实现方法详解

    // 获取客户端的 IP 地址 String ip = getClientIP(); // 获取提交参数 String params = getParams(); // 检查提交记录 if (isRepeatSubmit(ip, params, noRepeatSubmit.timeout())) { // 重复提交,抛出异常...

    初学SpringCloud连接Oracle数据库

    配置它们可以使你的服务通过服务名而不是IP地址来调用其他服务,从而实现服务间的通信。 例如,为Ribbon配置一个配置类: ```java @Configuration public class RibbonConfig { @Bean public IRule ribbonRule...

    Springcloud服务注册consul客户端过程解析

    它负责存储和管理所有微服务的信息,包括服务名称、实例、IP 地址、端口号等。这样其他微服务可以通过服务注册中心来发现和调用该服务。 Consul 服务注册中心 Consul 是一个开源的服务注册中心和配置管理工具,由 ...

    Spring Cloud项目实例

    每个服务启动后,都会向 Eureka Server 注册自己的信息,包括服务名、IP 地址、端口等。其他服务通过 Eureka 可以找到并调用这些服务,实现服务之间的通信。 2. **负载配置**:Spring Cloud Config 提供了集中式的...

    Spring Cloud Ribbon实现客户端负载均衡的方法

    客户端负载均衡是运行在客户端程序中的,如我们的 web 项目,然后通过获取集群的 IP 地址列表,随机选择一个 server 发送请求。相对于服务端负载均衡来说,它不需要消耗服务器的资源。 要使用 Spring Cloud Ribbon ...

    SpringCloud——服务注册(consul)

    Consul还支持DNS查询,允许服务消费者通过服务名直接进行DNS解析,获取服务提供者的IP地址。这种方式对开发者友好,无需关心底层服务发现的具体实现,只需按照服务名进行调用即可。 4. **健康检查**: Consul内置...

    springcloud注册中心Eureka集群示例代码.zip

    Spring Cloud 提供了 Ribbon,这是一个内置的客户端负载均衡器,它可以与 Eureka 配合使用。在 `springcloud-order` 中,通过 Ribbon,请求会被自动分配到 `springcloud-member` 的多个实例上,从而实现本地负载...

    spring cloud 资源

    服务消费者可以查询 Eureka 服务器获取服务提供者的地址,然后进行调用。Eureka 采用 RESTful API 进行通信,支持服务的注册、查询、健康检查等功能,并且具备自我保护机制,能有效防止网络延迟导致的服务不可用问题...

    springcloud-负载均衡,服务注册demo

    Spring Cloud提供了Eureka作为服务注册中心,允许各个服务实例在启动时向Eureka服务器注册自己的元数据(如服务名、IP地址、端口等)。服务消费者可以通过Eureka获取到服务提供者的列表,以便进行下一步的服务调用。...

Global site tag (gtag.js) - Google Analytics