?
在上篇文章中我們介紹了 java獲取請求 ip的方法,那么這篇文章我們就來詳細講解下獲取請求 ip的方法。獲取請求 ip的方法是基于 HTTP協(xié)議的,其原理如下: 1、用 web應用程序,將 web服務器端與客戶端通過 HTTP協(xié)議通信。 2、客戶端發(fā)送請求信息,由服務器端處理。 3、服務器端響應數(shù)據(jù),將信息返回給客戶端。 4、服務器端返回數(shù)據(jù),由瀏覽器解析并顯示。 5、我們以登陸網頁為例來介紹下獲取請求 ip的方法。 我們需要用到 servlet框架來做一個小項目,由于項目比較小,我們就不詳細講解了。下面我們來看一下具體代碼:
-
(1)獲取 cookie
我們用一個方法來獲取 cookie,在 Java中使用的方法是 setCookie。setCookie方法是在 servlet框架中的,它是基于 HTTP協(xié)議的,所以我們需要把獲取的 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發(fā)送給瀏覽器。這樣就能通過瀏覽器對該腳本進行解析并顯示了。
-
(3)獲取登陸密碼
獲取請求 ip的方法就介紹到這里,下面我們來看一下獲取登錄密碼的方法: 第一步、同樣是使用 servlet框架來編寫小項目,在 servlet中通過 double類來獲取請求 ip: 第二步、通過 javascript代碼,從 URL中獲取登陸密碼的賬號信息: 第三步、獲取賬號信息后,我們就要驗證它的合法性,然后就可以使用 setnx方法進行登錄了: 第四步、接著,我們就可以在 web服務器上輸入用戶名和密碼來進行登陸操作了。 第五步、登錄成功后,我們需要在 web頁面中進行一些驗證操作,這樣才能保證用戶的合法權益。 第六步、最后我們需要驗證一下用戶身份是否是合法用戶。登陸成功后,我們還需要再次驗證一下身份是否是合法用戶,否則可能會造成系統(tǒng)的不安全因素。所以,在獲取登錄密碼的過程中也要注意合法性問題。
-
(4)獲取瀏覽器地址
獲取瀏覽器地址,首先要獲取瀏覽器的 IP地址,通過 HTTP協(xié)議,我們可以獲取到請求 ip,通過 java的反射機制,我們也可以獲取到請求 ip。下面我們就來看一下如何通過反射機制獲取到請求 ip。 首先,我們需要定義一個函數(shù),作為反射的對象。接下來,我們創(chuàng)建一個反射對象,并在函數(shù)中調用它。例如: java的反射機制與 java. util. Request. Restart中的定義類似,需要注意的是這個類不能直接引用自定義的類,因為在反射中引用了父類。 然后我們在當前類中創(chuàng)建一個 Referer對象。在這個對象中定義一個 ref函數(shù)用于接收請求數(shù)據(jù)。這里面需要注意的是 ref函數(shù)需要和 referer對象的 proxy方法一起使用才能獲取到請求 ip。 這里面需要注意的是 refs函數(shù)不能直接引用自定義的類。 接下來,我們再創(chuàng)建一個 Refs對象并將它和 proxy方法一起使用來接收請求數(shù)據(jù)。
-
(5)獲取 HTTP協(xié)議信息
前面的代碼中,我們已經獲取到了請求的信息,但是這些信息并不完整,例如請求的 IP地址,無法得知它是哪個網段的。這個時候我們需要再一次獲取請求的信息。 由于我們已經獲取了請求信息,所以在 servlet中,只需要傳一個參數(shù)給 Servlet就可以了,而這個參數(shù)就是 HTTP協(xié)議地址。其實這個參數(shù)是比較簡單的,我們只需要在 servlet中傳一個 HTTP協(xié)議地址,而不需要傳遞任何其他信息。當然如果你要獲取請求的信息,那么可以將這個參數(shù)傳遞給 servlet,讓 servlet去獲取這個 HTTP協(xié)議地址。 那么如何獲取 HTTP協(xié)議地址呢?下面我們就來介紹下怎么獲取。首先我們要有一個連接: 這是 servlet如何獲取請求 IP的代碼,里面包含了一些關鍵字,如下: 這樣就可以獲取到 HTTP協(xié)議地址了。
-
(6)解析數(shù)據(jù)
當客戶端通過 HTTP請求獲取到服務器的數(shù)據(jù)后,在 servlet中的 connection接口中就會返回對應的數(shù)據(jù),然后我們就可以使用 servlet中的 client類來解析數(shù)據(jù)。 在獲取到請求信息后,我們可以根據(jù)數(shù)據(jù)來處理,也可以直接調用 client類來進行處理,例如: 可以看到:當我們使用 client類時,需要調用 servlet中的 connection接口。 其實在 servlet中還包含了很多的接口,當我們要用到這些接口時,就需要去實現(xiàn)對應的方法。例如: 其中最簡單的接口就是: 我們在使用 client類進行處理時,就可以使用到反射技術了。例如: 可以看到:在處理數(shù)據(jù)時,我們需要先在 servlet中創(chuàng)建一個變量 myCountData (),然后再使用 createString方法來獲取對應的數(shù)據(jù)。
常用的java獲取請求ip代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-446972.html
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.zghlxwxcb.cn/news/detail-446972.html
到了這里,關于java獲取請求ip的方法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!