web页面防盗链功能使用--request.getHeader("Referer")
使用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");判断访问本页面的链接来自哪里。具体做法:
- 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")的更多相关文章
- ASP.net UrlRewrite的防盗链功能
ASP.net中如何实现基于UrlRewrite的防盗链. ASP.net中最快实现UrlRewrite的方法这篇文章中说了如何做UrlRewrite,那只是一个最简单的应用 其实利用UrlRewri ...
- WEB服务器防盗链_HttpAccessKeyModule_Referer(Nginx&&PHP)
盗链的概念指在自己的页面上展示一些并不在自己服务器上的内容.也就是获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容.如,小站盗用大站的图片.音乐.视频.软件等 ...
- web html 防盗链
一概念 1防盗链 在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,网站可以检测目标网页访问的来源网页.有了referer跟踪来 ...
- servlet中使用request.getHeader("referer")获取页面从哪跳转过来的
问题 servlet中使用request.getHeader("referer")获取页面从哪跳转过来的,利用这个方法可以判断网页是否正常登录.我做了一个javaweb小项目,其中 ...
- H5 EventSource 实现web页面推送功能demo
/** * H5 EventSource 实现web页面推送功能demo */ var serverData,statusDiv; var SERVER_URL = "index.php&q ...
- 实现fastdfs防盗链功能
目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...
- request.getHeader("Referer")理解【转载】
request.getHeader("Referer")用于获取来源页地址,但有时却为空值,这是怎么回事.原因如下: getHeader("Referer")要 ...
- request.getHeader("referer")
在开发web程序的时候,有时我们需要得到用户是从什么页面连过来的,这就用到了referer. 它是http协议,所以任何能开发web程序的语言都可以实现,比如jsp中是: request.getHea ...
- 【JS】【5】request.getHeader("referer")的作用
正文: request.getHeader("referer"):获取来访者地址 注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的: 只有通过链接访 ...
随机推荐
- ThinkPHP框架返回插入记录的id号
ThinkPHP返回插入记录的id号 $Form->create()) $result = $Form->add(); 在执行上述语句后,若存在auto_increment字段,则可以使用 ...
- TP 查询语句中如何使用 FIND_IN_SET 这样的查询方法
TP 查询语句中如何使用 FIND_IN_SET 这样的查询方法 $condition['_string'] = 'FIND_IN_SET('.$citys.',city)';
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
ORM(Object Relational Mapping)对象关系映射 public class ORMTest { public static void main(String[] args) t ...
- http请求返回405
普通情况下,是你用了默认method=get,须要改为post
- Linux系统扩容根目录磁盘空间
作者:非法小恋 一.使用背景 Linux根目录磁盘空间不够用了,当修改了虚拟机模版增加磁盘大小或者插入了一块新硬盘,但是发现系统里的大小还是没改变. 产生的原因是没有给磁盘格式化,没有增加分区. 二. ...
- perl: warning: Setting locale failed.
本篇文章由:http://xinpure.com/perl-warning-setting-locale-failed/ 将 mac 系统切换成英文后,使用 git 命令出现如下错误: perl: w ...
- LOSF海量小文件问题解决思路及开源库
"+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...
- CString中Format函数与格式输入与输出
CString中Format函数与格式输入与输出 Format是一个非经常常使用.却又似乎非常烦的方法,下面是它的完整概貌.以供大家查询之用: 格式化字符串forma("%d" ...
- USES_CONVERSION的使用和注意
USES_CONVERSION是用来转换类型的,比如我们很常见的问题: 在Socket编程时候,我们的IP地址从界面上输进去一般都使用CString类型的,可是在SOCKADDR_IN中的inet_a ...
- EF6 Code First 模式更新数据库架构
定义好实体类和上下文类 在 Package Manager Console 输入以下命令 1.Enable-Migrations 启用数据迁移功能,该命令通常会在项目根目录下生成 Migrations ...