Java获取请求者IP和地址

这篇具有很好参考价值的文章主要介绍了Java获取请求者IP和地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

获取IP

public static String getIp(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.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

根据IP解析地址

在网上一番寻找,希望能找到一个根据IP解析地址的API,终于不负有心人,让我找到了,可是这个API是一个webservice,于是又学会了webservice调用,这个API来自webxml.com.cn,有着丰富的webservice接口,通过soapui调用情况如下图
http://ws.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl

Java获取请求者IP和地址

下面是实现根据IP获取地址的静态工具方法,说明:
userIp:不用多说,是上面方法获取到的IP
soapConnector: 简单说,就是soap接口的请求入口
再看方法里边,我们定义了url(实际请求地址)、request(顾名思义,定义请求报文的)、response(顾名思义,是咱们需要的响应啦)soapAction(可自行了解Soap接口为啥需要soapaction,如果不传,我们是无法调用成功的),下面我们一个个来。

public static String getAddressByIp(String userIp, SOAPConnector soapConnector){
        String address = "";
        String url = "http://ws.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx";
        GetCountryCityByIp request = new GetCountryCityByIp();
        request.setTheIpAddress(userIp);
        SoapActionCallback soapAction = new SoapActionCallback("http://WebXml.com.cn/getCountryCityByIp");
        GetCountryCityByIpResponse response = (GetCountryCityByIpResponse) soapConnector.callWebService(url, request, soapAction);
        address = response.getGetCountryCityByIpResult().getString().get(1);
        return address;
    }

GetCountryCityByIp 和 GetCountryCityByIpResponse
实际上,这两个类是通过maven的插件生成的
需要修改的节点为generatePackage,更换成自己的包路径
然后执行maven的compile,会在对应的包路径下生成一些类,这些类对应着webservice每个方法里的请求和响应

...略
<!-- 解析webservice的依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
...略
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.14.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <schemaLanguage>WSDL</schemaLanguage>
        <generateDirectory>src/main/java</generateDirectory>
        <generatePackage>cn.xyp.utils.soap.consumer.generated</generatePackage>
        <schemas>
            <schema>
                <url>http://ws.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl</url>
            </schema>
        </schemas>
    </configuration>
</plugin>

Java获取请求者IP和地址

soapAction,可以通过soapui获取

Java获取请求者IP和地址

soapConnector
除了SoapConnector,还需要一个配置类

package cn.xyp.utils.soap.consumer.client;

import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import org.springframework.ws.soap.client.core.SoapActionCallback;

public class SOAPConnector extends WebServiceGatewaySupport {

    public Object callWebService(String url, Object request, SoapActionCallback soapAction) {
        return getWebServiceTemplate().marshalSendAndReceive(url, request, soapAction);
    }
}
package cn.xyp.utils.soap.consumer.config;

import cn.xyp.utils.soap.consumer.client.SOAPConnector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

@Configuration
public class SoapClientConfig {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("cn.xyp.utils.soap.consumer.generated");
        return marshaller;
    }

    @Bean
    public SOAPConnector soapConnector(Jaxb2Marshaller marshaller) {
        SOAPConnector client = new SOAPConnector();
        client.setDefaultUri("http://ws.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx");
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        return client;
    }
}

如何调用getAddressByIp

@Autowired
private SOAPConnector soapConnector;

IpUtil.getAddressByIp(userIp, soapConnector)

测试

@Test
public void getAddressByIp(){
    String url = "http://ws.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx";
    GetCountryCityByIp request = new GetCountryCityByIp();
    request.setTheIpAddress("101.227.1.197");
    SoapActionCallback soapAction = new SoapActionCallback("http://WebXml.com.cn/getCountryCityByIp");
    GetCountryCityByIpResponse response = (GetCountryCityByIpResponse) soapConnector.callWebService(url, request, soapAction);
    System.out.println(response.getGetCountryCityByIpResult().getString().get(1));
}

Java获取请求者IP和地址文章来源地址https://www.toymoban.com/news/detail-462614.html

到了这里,关于Java获取请求者IP和地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Java获取发送请求的电脑的IP地址

    客户端所有的请求信息都可以通过HttpServletRequest获得,获取客户端ip可以通过getRemoteAddr()获取。 但是如果客户端是通过代理访问我们的服务器,那么getRemoteAddr()获取到的ip就很有可能不是真实的ip,这时候我们可以通过请求头里的x-forwarded-for来获取真实的ip,请求每经一次代理

    2024年02月16日
    浏览(26)
  • 从public static void main(String[] args)看如何构造数据

    java语言中public static void main(String[] args)里面的ages有什么作用? 在Java语言中, public static void main(String[] args) 是一个特殊的方法,它是Java程序的入口点。当你运行一个Java程序时,程序会从这个方法开始执行。这个方法的参数 String[] args 是一个字符串数组,用于传递命令行参数

    2024年02月12日
    浏览(84)
  • 通过 Request 请求获取真实 IP 地址以及对应省份城市

    title: 通过 Request 请求获取真实 IP 地址以及对应省份城市和系统浏览器信息 date: 2022-12-16 16:20:26 tags: GeoIP2 UserAgentUtils categories: 开发实践 cover: https://cover.png feature: false 代码如下,这里的 CommonUtil.isBlank() 为封装的判空方法 1、首先,获取 X-Forwarded-For 中第 0 位的 IP 地址,它在

    2024年02月01日
    浏览(38)
  • 前端获取用户ip地址,并放在请求头上(uniapp和H5)

     今日需求:          获取用户ip地址,并在每一次请求的时候带上这个ip地址 获取 用户ip地址的方式有很多,各大地图的开发者平台都能找到相关的API接口地址,都很牛掰,但是我看了一下,好像不太适合我(懒病犯了~~),所以我就用shohu的接口: http://pv.sohu.com/cityjson

    2024年02月11日
    浏览(38)
  • 轻松理解Java中的public、private、static和final

    一、概念 1、public和private 两个都是访问权限修饰符,用于控制外界对类内部成员的访问。 public:表明对象成员是完全共有的,外界可以随意访问。用public修饰的数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。 private:表明对象成员是完全私有的,不

    2024年02月16日
    浏览(33)
  • nestjs:nginx反向代理服务器后如何获取请求的ip地址

    问题:         如题 参考:         nodejs+nginx获取真实ip-腾讯云开发者社区-腾讯云         「转」从限流谈到伪造 IP nginx remote_addr          解决办法: 1.设置nginx         对于代理部分,对http header添加Host、X-Real-IP、X-Forwarded-For(最重要)          2.nestjs使用

    2024年02月13日
    浏览(48)
  • golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

    今天碰到了个需求,我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包,发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中, ip 是网络层协议,而 http 是应用层协议。去翻了下 net 包,发现了基础用法。 先提一下,域名访问服务器

    2024年02月02日
    浏览(39)
  • Java获取IP地址

    在Java编程中,我们经常需要获取本地或远程计算机的IP地址。IP地址是用于唯一标识计算机的一组数字,它在网络通信中起到重要的作用。下面将介绍几种在Java中获取IP地址的方法,并提供相应的源代码。 获取本地IP地址 要获取本地计算机的IP地址,我们可以使用Java的 InetA

    2024年01月25日
    浏览(33)
  • Java-通过IP获取真实地址

    最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 这个是获取正确 IP 地址的方法,可以直接使用的。 通过以上方法你可以获取到访问者的 IP 地址,只有获取到了 IP 地址,才能

    2024年02月15日
    浏览(34)
  • java实现通过IP地址获取mac(物理地址)

    java实现通过IP地址获取mac(物理地址),只能获取到局域网的mac地址,具体代码如下:

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包