使用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");判断访问本页面的链接来自哪里。具体做法:

  1. package edu.request;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class RefererServlet extends HttpServlet {
  8. //防盗链
  9. public void doGet(HttpServletRequest request, HttpServletResponse response)
  10. throws ServletException, IOException {
  11. //referer为客户端带来的请求头
  12. String referer = request.getHeader("Referer");
  13. System.out.println(referer);
  14. //如果链接出自地址栏的输入,则跳转至本站点RequestAndResponse应用的首页
  15. if (referer==null) {
  16. System.out.println("由于您访问的内容版权所有,您是地址栏上输入的链接,即将跳转至本站首页...");
  17. response.sendRedirect("/RequestAndResponse/index.jsp");
  18. return ;
  19. }
  20. //如果链接出自本站点的RequestAndResponse应用的页面,则正常显示,如果是出自其他站点或本站点的其他应用,则跳转至本站点RequestAndResponse应用的首页
  21. if(!referer.startsWith("http://localhost:8080/RequestAndResponse")){
  22. System.out.println("由于您访问的内容版权所有,您是其他网站页面的链接,即将跳转至本站首页...");
  23. response.sendRedirect("/RequestAndResponse/index.jsp");
  24. return ;
  25. }else {
  26. System.out.println("来自本站页面的链接,合法用户");
  27. request.getRequestDispatcher("content.jsp").forward(request, response);
  28. }
  29. }
  30. public void doPost(HttpServletRequest request, HttpServletResponse response)
  31. throws ServletException, IOException {
  32. doGet(request, response);
  33. }
  34. }

比如:通过http://localhost:8080/ServletDetail/index.jsp页面的一个链接,链接至http://localhost:8080/RequestAndResponse/referer,则request中封装这Referer请求头,其内容为http://localhost:8080/ServletDetail/index.jsp

如下图

:

点击新闻后,控制台输出:

web页面防盗链功能使用--request.getHeader("Referer")的更多相关文章

  1. ASP.net UrlRewrite的防盗链功能

    ASP.net中如何实现基于UrlRewrite的防盗链. ASP.net中最快实现UrlRewrite的方法这篇文章中说了如何做UrlRewrite,那只是一个最简单的应用 其实利用UrlRewri ...

  2. WEB服务器防盗链_HttpAccessKeyModule_Referer(Nginx&&PHP)

    盗链的概念指在自己的页面上展示一些并不在自己服务器上的内容.也就是获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容.如,小站盗用大站的图片.音乐.视频.软件等 ...

  3. web html 防盗链

    一概念 1防盗链 在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,网站可以检测目标网页访问的来源网页.有了referer跟踪来 ...

  4. servlet中使用request.getHeader("referer")获取页面从哪跳转过来的

    问题 servlet中使用request.getHeader("referer")获取页面从哪跳转过来的,利用这个方法可以判断网页是否正常登录.我做了一个javaweb小项目,其中 ...

  5. H5 EventSource 实现web页面推送功能demo

    /** * H5 EventSource 实现web页面推送功能demo */ var serverData,statusDiv; var SERVER_URL = "index.php&q ...

  6. 实现fastdfs防盗链功能

    目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...

  7. request.getHeader("Referer")理解【转载】

    request.getHeader("Referer")用于获取来源页地址,但有时却为空值,这是怎么回事.原因如下: getHeader("Referer")要 ...

  8. request.getHeader("referer")

    在开发web程序的时候,有时我们需要得到用户是从什么页面连过来的,这就用到了referer. 它是http协议,所以任何能开发web程序的语言都可以实现,比如jsp中是: request.getHea ...

  9. 【JS】【5】request.getHeader("referer")的作用

    正文: request.getHeader("referer"):获取来访者地址 注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的: 只有通过链接访 ...

随机推荐

  1. SQL Server 之 与 OVER() 函数

    在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 一. OVER() 函数 语法结构:OVER( [ PARTITION BY ... ] [ ORDER BY ... ...

  2. Log4j配置文件例子

    Log4j配置文件例子: # Define somedefault values that can be overridden by system properties hbase.root.logg ...

  3. FFmpeg视频处理必备

    http://ffmpeg.org/官网 A complete, cross-platform solution to record, convert and stream audio and vid ...

  4. VMWare Workstation 15 serial number

    Serial number:YZ718-4REEQ-08DHQ-JNYQC-ZQRD0 该Key仅供体验,支持正版,从我做起. 点击此处购买正版

  5. CKEditor与CKFinder学习--CKFinder源代码改动自己定义上传文件名称

    CKFinder的系列文章到眼下应该说基本能够满足开发需求了,只是另一个小细节,CKFinder默认上传的文件名称和源文件名称一致,假设文件名称反复会自己主动加入编号"(1)"&q ...

  6. Android Studio优秀插件汇总

  7. Java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)

    程序员都很懒,你懂的! java程序员在实际的开发中会遇到很多的单位换算问题.今天我给大家带来的是关于计算机硬盘大小的换算.多数情况下,一般要求 b,kb,mb,gb,tb,pb之间的大小转换,我们都 ...

  8. 怎样线程安全地遍历List:Vector、CopyOnWriteArrayList

    遍历List的多种方式 在讲怎样线程安全地遍历List之前,先看看通常我们遍历一个List会採用哪些方式. 方式一: for(int i = 0; i < list.size(); i++) { ...

  9. 〖Linux〗使用ssh登录远程主机,并在本地打开远程图形界面

    1. 修改/etc/ssh/sshd_config文件,设置允许TCP转发和X11转发 AllowTcpForwarding yes X11Forwarding yes 2. 登录无图形远程主机,并允 ...

  10. STS(Spring Tool Suite)使用maven添加jar包

    打开:http://mvnrepository.com/ 搜索:hibernate 或者:http://search.maven.org 搜索:hibernate-core 两种方式都可以添加jar包 ...