教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓之防盜鏈

更新時間:2016年07月29日18時19分 來源:傳智播客Java培訓學院 瀏覽次數(shù):

瀏覽器向服務(wù)器發(fā)送請求,可能是直接在瀏覽器地址欄中輸入URL地址進行訪問,也可能是點擊一個網(wǎng)頁上的超鏈接而發(fā)出。對于第一種情況,瀏覽器不會發(fā)送Referer請求頭,而對于第二種情況,瀏覽器會使用Referer請求頭字段來標識請求的超鏈接所在網(wǎng)頁的URL。如下所示:
Referer: http://localhost:8080/Example07/
所謂的防盜鏈其實是Referer請求頭的一個很重要的功能,在防盜鏈及Content-Type解讀文檔中,對于什么是防盜鏈有了詳細的解釋。今天,我們要學習的是如何通過request對象的相關(guān)方法實現(xiàn)防盜鏈功能。

1.防盜鏈案例練習

下面的防盜鏈練習是在Servlet中判斷請求的來源,即referer請求頭的值是否包含”localhost”,如果不包含或referer的值為null,則重定向到百度首頁,否則在控制臺上打印“hello“。具體如下所示:
(1)創(chuàng)建一個web應(yīng)用,Example08,在該應(yīng)用下創(chuàng)建一個Servlet類,RefererServlet,主要代碼如例1-1所示:
例1-1 RefererServlet.java
public class RefererServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       /**
        * 使用Referer請求頭,來防盜鏈
        */
       String referer = request.getHeader("Referer");
       System.out.println(referer);
       if(referer == null || !referer.contains("localhost")) {
           response.sendRedirect("http://www.baidu.com");
       } else {
           System.out.println("hello!");
       }
    }
}
(2)RefererServlet在web.xml文件中,其訪問路徑的配置為:“/RefererServlet”。
(3)將Example08發(fā)布到Tomcat服務(wù)器中,然后啟動Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example08/RefererServlet,效果如圖1-1所示:
圖1-1 瀏覽器顯示結(jié)果
訪問RefererServlet后跳轉(zhuǎn)到百度首頁,并且控制臺上打印“null”,表明在地址欄上直接訪問資源,該請求頭的值為空。
(4)在Example08應(yīng)用中新建一個test.html,主要代碼如例1-2所示:
例1-2 test.html
<body>
<a href="/Example08/RefererServlet">去RefererServlet</a>
</body>
(5)重新啟動Tomcat服務(wù)器,在瀏覽器端訪問test.html,如圖1-2所示:
圖1-2 瀏覽器顯示結(jié)果
(6)點擊圖1-2所示的超鏈接“去RefererServlet”,控制臺打印結(jié)果如圖1-3所示:
圖1-3 控制臺打印結(jié)果
圖1-3中打印的Referer請求頭的值正是訪問RefererServlet的請求來源test.html的訪問路徑,其中包含“localhost”,所以“hello”也會被打印在控制臺中。
有了Referer請求頭,我們就可以根據(jù)它的值來判斷訪問來源是否是從本站發(fā)出,也可以通過它來做一些統(tǒng)計工作。
本文版權(quán)歸傳智播客Java培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://metathetuscanyresort.com/javaee
0 分享到:
和我們在線交談!