使用HttpServletRequest对象getHeader("referer")方法实现下载资源防盗链(简单版)

1. 开发工具:

jdk-1.8
tomcat-7.0
eclipse

2. 关于代码中的方法:

1. getHeader(“referer”);

javaee_6_API
部分翻译如下:
String getHeader(java.lang.String name)将指定请求头的值作为字符串返回。如果请求不包含指定名称的头,则此方法返回null。如果有多个具有相同名称的头,则此方法返回请求中的第一个头。头名称不区分大小写。您可以对任何请求头使用此方法。

2. getServerName();

获得应用的根url,比如说你的应用的根路径是 http://localhost:8080,那么该方法的返回值为字符串 “localhost”。
更多相关↓
request.getScheme():获取协议类型:http
request.getServerName():获取服务器域名或IP地址:localhost
request.getServerPort():获取服务器端口:8080(tomcat端口)

3. startsWith();

startsWith()方法用来判断当前字符串是否是以另外一个给定的子字符串“开头”的,根据判断结果返回 true 或 false。
↓↓↓该图是statrtswith()源码片段↓↓↓
startsWith()方法源码

3.具体代码实现:

1. 创建名字为servlet3的servert文件
		/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=utf-8");//输出中文不乱码
		PrintWriter out = response.getWriter();
		
		String referer= request.getHeader("referer");
		/*
		 * referer头,告知服务器该请求是从哪个页面链接过来的。
		 * referer经常被用于页面访问统计、图片防盗链等。
		 */
		System.out.println("referer="+referer);
		
		String url="http://"+request.getServerName();//获得应用的根url
		
		System.out.println("url="+url);

		if(referer!=null&&referer.startsWith(url)) {
			/*
			 * 判断不为空,且startsWith()返回true,即验证通过
			 */
			out.println("可以下载");
		}else{
			out.println("不能下载,需要到index.jsp中进行下载");
//			RequestDispatcher dispatcher= request.getRequestDispatcher("index.jsp");
//			dispatcher.forward(request, response);
 //↑↑↑↑启用后可请求转发到自己定义的下载链接页面中,即index.jsp
			
		}
	}
2. 创建名为index.jsp的jsp文件代码如下
<!-- 在body中定义超链接标签,连接到上面的servlet3中; -->
<body>
<a href="/text/Servlet3">downloading</a>
</body>

4.结果图片展示:

先进入下载页面index.jsp,效果如下 ↓

点击前

点击index.jsp中的downloading超链接,跳转到servlet3中,效果如下 ↓
在控制台可查看定义的referer与url的参数;

在这里插入图片描述

上面是正常点击进入,下面跳过index.jsp,直接在浏览器输入servlet3的地址,进入到sevlet3中,效果如下 ↓

效果2

5.完结

这样就实现了防盗链。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单Java类,它使用HttpServletRequest对象的getHeader("referer")方法实现下载资源防盗链的功能。当用户通过非法渠道请求下载资源时,该类将返回一个错误页面。 ```java 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 DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查referer请求头 String referer = request.getHeader("referer"); if (referer == null || !referer.startsWith("http://www.mysite.com")) { // 非法渠道请求下载资源,返回错误页面 response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } // 获取下载资源的内容 // ... // 输出下载资源的内容到页面上 // ... } } ``` 在上面的代码中,我们使用HttpServletRequest对象的getHeader("referer")方法来获取referer请求头。如果referer请求头为null或者不以http://www.mysite.com开头,那么我们就认为这是一个非法渠道请求下载资源,返回一个403 Forbidden错误页面。 当referer请求头合法时,我们可以获取下载资源的内容,并将其输出到页面上。 需要注意的是,这种方式并不能完全防止资源盗链,因为referer请求头可以被修改或者删除。为了更加安全地防止资源盗链,我们可以使用其他方式,例如生成随机的下载链接或者使用加密方式传输资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵泡泡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值