標籤:判斷 調用 cli 技術分享 dog load news 應用程式 ade
使用Request對象設定頁面的防盜鏈
所謂的防盜鏈就是當你以一個非正常渠道去訪問某一個Web資源的時候,伺服器會將你的請求忽略並且將你的當前請求變為按正常渠道訪問時的請求並返回到相應的頁面,使用者只有通過該頁面中的相關操作去訪問想要請求的最終資源。
例如,你有一個訪問某資源的網址,但是你事先不知道這個網址是有防盜鏈的,那麼當你輸入該網址時你可能會發現,並沒有馬上跳轉到你想要的資源頁面而是一些無關的資訊頁面,但是就是在這些資訊頁面中你發現有一個超連結或是其他動作可以跳轉到你所訪問的最終資源頁面。
1. 防盜鏈定義:所謂防盜鏈是指防止其他web網站頁面通過串連本網站的頁面來訪問本網站內容,這樣對於本網站來說侵犯了本網站的著作權
2.非法使用者: 常訪問本網站頁面的連結有三種出處:
(1) 地址欄輸入連結地址。如地址欄上輸入www.csdn.com/news_100.jsp;
(2)其他網站上的應用程式的頁面上通過連結本網站頁面資源。如(www.123.com/content.jsp頁面上有一連結指向www.csdn.NET/news_100.jsp);
(3)本網站上的頁面資源串連到本網站的另外的頁面資源。如(www.csdn.com/mulu.jsp頁面上有一連結指向www.csdn.com/news_100.jsp);
這三類使用者中第一類和第二類通常是非法使用者,如果控制這些使用者不能訪問本網站頁面資源
3.如何防盜鏈:通過調用request.getHeader("Referer");判斷訪問本頁面的連結來自哪裡。具體做法:
[java] view plain copy
- package edu.request;
-
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- 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);
- //如果連結出自地址欄的輸入,則跳轉至本網站RequestAndResponse應用的首頁
- if (referer==null) {
- System.out.println("由於您訪問的內容著作權,您是地址欄上輸入的連結,即將跳轉至本站首頁...");
- response.sendRedirect("/RequestAndResponse/index.jsp");
- return ;
- }
- //如果連結出自本網站的RequestAndResponse應用的頁面,則正常顯示,如果是出自其他網站或本網站的其他應用,則跳轉至本網站RequestAndResponse應用的首頁
- if(!referer.startsWith("http://localhost:8080/RequestAndResponse")){
- System.out.println("由於您訪問的內容著作權,您是其他網站頁面的連結,即將跳轉至本站首頁...");
- response.sendRedirect("/RequestAndResponse/index.jsp");
- return ;
- }else {
- System.out.println("來自本站頁面的連結,合法使用者");
- request.getRequestDispatcher("content.jsp").forward(request, response);
- }
-
-
- }
-
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
-
- }
比如:通過http://localhost:8080/ServletDetail/index.jsp頁面的一個連結,連結至http://localhost:8080/RequestAndResponse/referer,則request中封裝這Referer要求標頭,其內容為http://localhost:8080/ServletDetail/index.jsp
如
:
點擊新聞後,控制台輸出:
web頁面防盜鏈功能使用--request.getHeader("Referer")