java获取请求ip的方法

news2024/11/17 5:24:55

 

在上篇文章中我们介绍了 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代码:

1. 使用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;
}
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LNMP架构和论坛搭建以及一键部署

数据流向 一、Nginx服务安装 1、关闭防火墙 [rootking ~]# systemctl stop firewalld [rootking ~]# systemctl disable firewalld [rootking ~]# setenforce 0 2、将所需软件包拖入/opt目录下 3、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 4、创建运…

Feign快速入门

文章目录 一、Feign1.1 Feign介绍1.2 Feign的使用步骤1.3 Feign的自定义配置1.3.1 配置方法 1.4 Feign的优化 一、Feign 1.1 Feign介绍 Feign是一个Java HTTP客户端,它使开发人员可以轻松地与RESTful API进行交互。Feign使用注释来描述REST API,它还支持…

Springboot整合Junit5

1 SpringBoot整合Junit (一)junit5 介绍 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。 JUnit 5 JUnit Platfo…

音视频开发十九:SDL线程和事件

SDL事件相关API DL_Event 是SDL库中使用的一个数据结构,用于表示系统中发生的事件。一个事件可以是键盘按键、鼠标移动、游戏手柄移动、窗口事件等。SDL_Event 结构包含有关事件类型、事件发生时间和事件参数的详细信息。 SDL_Event 结构具有以下成员:…

[5 种有效方法] 适用于 Android 的通用解锁图案/密码

在当今世界,保护您的密码对于您的文件和数据的安全至关重要,尤其是在第三方应用程序盛行的情况下。为这些应用程序注册帐户不是问题,就像记住它们一样。但是,如果您不知何故忘记了手机密码,您仍然可以在不丢失宝贵数据…

突破规模化运维瓶颈 SREWorks云原生数智运维平台揭秘

作者: 钟炯恩——阿里云大数据基础工程技术团队运维专家 引言 突破规模化运维瓶颈是诸多IT规模增长的企业及组织当前遇到的比较棘手的问题。面对这些问题,多数人的第一反应是上云。但是上云之后我们会发现,即使云上的架构规模增大&#xf…

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统(DNS)是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统,它将各种信息与分配给每个参与实体的域名相关联,它基…

ChatGPT 火了,一大批开源平替也来了

ChatGPT 凭一己之力让全球为 AI 沸腾,引发了科技巨头之间的聊天机器人军备竞赛。 众所周知,ChatGPT 的背后技术是 GPT(Generative Pre-trained Transformer)模型。GPT 是一种基于 Transformer 模型的自然语言处理模型,由 OpenAI 公司开发。它…

【elasticsearch部署】

安装elasticsearch 1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件(较慢)3.2.离线安装ik插件(推荐)1)查看数据卷目录2)解压缩分词器安…

前端必备的nginx知识点

nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全_java冯坚持的博客-CSDN博客 前端必备的nginx知识点 - 掘金 前言: 最近在做一个后台项目 ngixn简介 nginx是一款轻量级&…

【Sql】sql语句练习随记

本文通过最经典的“学生-成绩-课程-教师”表来帮助练习sql语句。 STUDENT表 SNO 学号SNAME 姓名SSEX 性别SBIRTHDAY 生日CLASS 班级 SCORE表 SNO 学号CNO 课程编号DEGREE 分数 COURSE表 CNO 课程编号CNAME 课程名称TNO 教师编号 TEACHER表 TNO 教师编号TNAME 教师姓名TS…

(包教包会)最强分布式锁工具:Redisson

今天来聊聊分布式锁的最强实现:Redisson 从分布式锁到Redisson实现非常详细,适合慢慢咀嚼~ 一. Redisson概述 1.1 什么是Redisson? Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。…

CRMEB开源商城/标准版后台默认admin路径修改、后台目录地址修改

默认admin路径修改 v4.7 版本开始兼容可以修改admin路径,可以根据自己的要求更换后台访问地址; 默认路径不能携带特殊字符、全部都为小写字母 修改后台admin默认路径 标准版本文件位置根目录/config/app.php 开源版本文件位置根目录/crmeb/config/app.p…

新增套餐/redis/QuartZ

套餐其实就是检查组的集合,例如有一个套餐为“入职体检套餐”,这个体检套餐可以包括多个检查组:一般检查、血常规、尿常规、肝功三项等。所以在添加套餐时需要选择这个套餐包括的检查组。 套餐对应的实体类为Setmeal,对应的数据表…

深度学习(7)之图像抠图 Image Matting算法调研

目录 1.Trimap和Strokes 2. 相关数据集 3.论文算法调研 3.1 Deep Image Matting 3.2 Semantic Image Matting 3.3 Background Matting 3.4 Background Matting V2 3.5 Semantic Human Matting 3.6 HAttMatting 3.7 MMNet:Towards Real-Time Automatic Portrait Matt…

Nginx虚拟主机、优化和防盗链

一、Nginx虚拟主机 1、基于域名的nginx虚拟主机的操作步骤 1.1 为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "192.168.2.66 www.xkq.com www.wy.com" >> /etc/hosts1.2 为虚拟主机准备网页文档 mkdir -p /var/www/html/ly/ mkdir -p /var/w…

经典文献阅读之--VGICP(体素化的ICP匹配)

0. 简介 之前我们在以前的文章中介绍了很多有关于点云匹配相关的知识,最近两年处理GICP这一大一统的ICP匹配方法以外,还有一个工作对体素化和ICP这两者打起了心思,《Voxelized GICP for Fast and Accurate 3D Point Cloud Registration》提出…

动车的颜色种类

01 大家平时见到最多的动车 可能就是白色的吧 和谐号动车组开行后 白就是动车的经典配色 白色为底 车腰一条蓝色飘带让其设计感十足 我们也可以把这种动车配色 称为和谐白 02 复兴号CR400AF型电力动车组 最高运营速度350公里每小时 因其车身采用银色底色 搭配侧窗…

大数据时代必备技能,从0开始学好数据可视化

当今社会,数据可视化已经成为了一项非常重要的技能。随着大数据时代的到来,越来越多的人开始关注数据可视化,并希望能够快速地掌握这项技能。那么,如何快速学习数据可视化呢?以下是AdBright数据分析师的一些建议。 什么…

CDN的发展史和未来

互联网是一种不断变化的机制,新形式的数据和内容正在不断创造。在它商业化后不久,必须解决尽快将大量数据推送给最终用户的问题,CDN因此应运而生。 CDN的根源产生于近20年前,并一直是内容交付的驱动力,自其创立以来&a…