在上篇文章中我们介绍了 java获取请求 ip的方法,那么这篇文章我们就来详细讲解下获取请求 ip的方法。获取请求 ip的方法是基于 Http协议的,其原理如下: 1、用 WEB应用程序,将 web服务器端与客户端通过 HTTP协议通
在上篇文章中我们介绍了 java获取请求 ip的方法,那么这篇文章我们就来详细讲解下获取请求 ip的方法。获取请求 ip的方法是基于 Http协议的,其原理如下: 1、用 WEB应用程序,将 web服务器端与客户端通过 HTTP协议通信。 2、客户端发送请求信息,由服务器端处理。 3、服务器端响应数据,将信息返回给客户端。 4、服务器端返回数据,由浏览器解析并显示。 5、我们以登陆网页为例来介绍下获取请求 ip的方法。 我们需要用到 servlet框架来做一个小项目,由于项目比较小,我们就不详细讲解了。下面我们来看一下具体代码:
(1)获取 cookie
我们用一个方法来获取 cookie,在 Java中使用的方法是 setCookie。setCookie方法是在 servlet框架中的,它是基于 HTTP协议的,所以我们需要把获取的 cookie的内容都放到 setCookie里面。 在 servlet框架中,我们只需要把获取的 cookie放到 setCookie中即可,而不需要对 cookie做任何处理。所以,在获取 cookie时只需要关心 setCookie是什么,然后调用 servlet框架中提供的方法即可。我们可以看到,在 setCookie中有两个方法: 这里的$ currentContents是指访问时要读取的内容。$ token是指每次访问时,服务器都会将返回的内容放在 token中。$ contents和$ token之间,要加一个逗号隔开。
(2)获取 token
为了让浏览器能够识别请求信息,我们需要给浏览器提供一个 token。在 servlet框架中,有一个方法叫做“protected token”,其作用是获取浏览器提供的 token,这个方法用于浏览器检测请求信息是否合法。 我们可以使用如下代码来获取 token: 当然我们也可以使用第三方提供的 token。比如我们需要获取一个 javascript脚本的 token,那么可以使用如下代码来获取: 我们把这个代码写在 servlet中,然后使用 createToken方法来获取该脚本的 token,由于 Java并不支持 Javascript脚本的 token,所以我们需要使用 javascript来生成这个脚本的 token,然后将生成的 token发送给浏览器。这样就能通过浏览器对该脚本进行解析并显示了。
(3)获取登陆密码
获取请求 ip的方法就介绍到这里,下面我们来看一下获取登录密码的方法: 第一步、同样是使用 servlet框架来编写小项目,在 servlet中通过 double类来获取请求 ip: 第二步、通过 javascript代码,从 URL中获取登陆密码的账号信息: 第三步、获取账号信息后,我们就要验证它的合法性,然后就可以使用 setnx方法进行登录了: 第四步、接着,我们就可以在 web服务器上输入用户名和密码来进行登陆操作了。 第五步、登录成功后,我们需要在 web页面中进行一些验证操作,这样才能保证用户的合法权益。 第六步、最后我们需要验证一下用户身份是否是合法用户。登陆成功后,我们还需要再次验证一下身份是否是合法用户,否则可能会造成系统的不安全因素。所以,在获取登录密码的过程中也要注意合法性问题。
(4)获取浏览器地址
获取浏览器地址,首先要获取浏览器的 IP地址,通过 HTTP协议,我们可以获取到请求 ip,通过 java的反射机制,我们也可以获取到请求 ip。下面我们就来看一下如何通过反射机制获取到请求 ip。 首先,我们需要定义一个函数,作为反射的对象。接下来,我们创建一个反射对象,并在函数中调用它。例如: java的反射机制与 java. util. Request. Restart中的定义类似,需要注意的是这个类不能直接引用自定义的类,因为在反射中引用了父类。 然后我们在当前类中创建一个 Referer对象。在这个对象中定义一个 ref函数用于接收请求数据。这里面需要注意的是 ref函数需要和 referer对象的 proxy方法一起使用才能获取到请求 ip。 这里面需要注意的是 refs函数不能直接引用自定义的类。 接下来,我们再创建一个 Refs对象并将它和 proxy方法一起使用来接收请求数据。
(5)获取 HTTP协议信息
前面的代码中,我们已经获取到了请求的信息,但是这些信息并不完整,例如请求的 IP地址,无法得知它是哪个网段的。这个时候我们需要再一次获取请求的信息。 由于我们已经获取了请求信息,所以在 servlet中,只需要传一个参数给 Servlet就可以了,而这个参数就是 HTTP协议地址。其实这个参数是比较简单的,我们只需要在 servlet中传一个 HTTP协议地址,而不需要传递任何其他信息。当然如果你要获取请求的信息,那么可以将这个参数传递给 servlet,让 servlet去获取这个 HTTP协议地址。 那么如何获取 HTTP协议地址呢?下面我们就来介绍下怎么获取。首先我们要有一个连接: 这是 servlet如何获取请求 IP的代码,里面包含了一些关键字,如下: 这样就可以获取到 HTTP协议地址了。
(6)解析数据
当客户端通过 HTTP请求获取到服务器的数据后,在 servlet中的 connection接口中就会返回对应的数据,然后我们就可以使用 servlet中的 client类来解析数据。 在获取到请求信息后,我们可以根据数据来处理,也可以直接调用 client类来进行处理,例如: 可以看到:当我们使用 client类时,需要调用 servlet中的 connection接口。 其实在 servlet中还包含了很多的接口,当我们要用到这些接口时,就需要去实现对应的方法。例如: 其中最简单的接口就是: 我们在使用 client类进行处理时,就可以使用到反射技术了。例如: 可以看到:在处理数据时,我们需要先在 servlet中创建一个变量 myCountData (),然后再使用 createString方法来获取对应的数据。
常用的java获取请求ip代码:
使用httpservletRequest对象获取请求IP地址:
```java
String 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.getHeader("HTTP_CLIENT_IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
```
2. 使用InetAddress对象获取请求IP地址:
```java
InetAddress inetAddress = InetAddress.getLocalHost();
String ipAddress = inetAddress.getHostAddress();
```
3. 使用spring框架获取请求IP地址:
```java
public String getIpAddress(HttpServletRequest request) {
String 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.getHeader("HTTP_CLIENT_IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
if (ipAddress != null && ipAddress.length() > 15 && ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
return ipAddress;
}
```
来源地址:https://blog.csdn.net/qq_42751978/article/details/130194839
--结束END--
本文标题: java获取请求ip的方法
本文链接: https://www.lsjlt.com/news/397441.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0