http 请求中的 referer

浏览器在向 web 服务器发送一个 http 请求的时候,服务器会把 http 的请求包装成一个 request 对象,在这些请求里面就包括 referer,它的意思是要告诉服务器,该请求来自哪里。比如在一个网页里面插入一个超链接,链接到其他的网页,那么当点击这个超链接从而链接到另外一个页面的时候,相当于浏览器向 web 服务器发送了一个 http 请求,对于另外一个页面而言,这个 referer 就是上一个页面的 URL,而对于从地址栏里面直接输入 URL 或者是刷新网页的方式,则 referer = null,通过设置这个 referer 可以防止盗链的问题

看下面的代码,比如我从浏览器的地址栏里面直接输入地址:http://localhost:8080/Servlet1/MainFrame,然后点击回车键,则会输出:非法入侵

[java]  view plain  copy
  1. package com.mx.view;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class MainFrame extends HttpServlet {  
  12.   
  13.       
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.         response.setContentType("text/html;charset=utf-8");  
  17.         PrintWriter out = response.getWriter();  
  18.         String referer=response.getHeader("Referer");  
  19.         if(referer==null||!referer.startsWith("http://localhost:8080/Servlet1")){  
  20.             response.sendRedirect("/Servlet1/Error");  
  21.         }else{  
  22.             out.println("合法查看!");  
  23.         }  
  24.         response.setContentType("text/html;charset=utf-8");  
  25.       
  26.         out.println("<h1>登录界面</h1>");  
  27.           
  28.     }  
  29.       
  30.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  31.             throws ServletException, IOException {  
  32.   
  33.         this.doGet(request, response);  
  34.     }  
  35.   
  36. }  
其中 if 语句里面就是判断 referer 是否合法,即:如果 referer 为空,或者 referer 的来源 URL 不是以:http://localhost:8080/Servlet1 开头(也就是不是通过本站内的超链接过来的),那么将跳转到下面的 Error 的错误页面,如果是在本站内访问是可以的
[java]  view plain  copy
  1. package com.mx.view;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class Error extends HttpServlet {  
  12.   
  13.       
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.   
  17.         response.setContentType("text/html;charset=utf-8");  
  18.         PrintWriter out = response.getWriter();  
  19.           
  20.         out.println("非法入侵");  
  21.           
  22.     }  
  23.   
  24.       
  25.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  26.             throws ServletException, IOException {  
  27.   
  28.         this.doGet(request, response);  
  29.     }  
  30.   
  31. }  

附 Servlet1 项目目录图:

猜你喜欢

转载自blog.csdn.net/smile_yangyue/article/details/79561482