快速业务通道

IHttpHandler防盗链!我的资源只有我的用户才能下载

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11

昨天也提到了IHttpHandler接口主要有一个IsReusable属性和一个ProcessRequest方法,利用这个方法我们可以处理很多事情的,昨天我们利用了这个方法给图片动态添加了水印,今天我再来展示另一种用法。

大家查看一个msdn,可以看到它的声明如下:
Visual Basic(声明)
Sub ProcessRequest ( _
    context As HttpContext _
)
 
Visual Basic(用法)
Dim instance As IHttpHandler
Dim context As HttpContext instance.ProcessRequest(context)
 
C#
void ProcessRequest (
    HttpContext context
)
注意这个HttpContext对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。 有了它我们就方便多了,因为我们的下载资源一般都会有一个下载介绍(假设为details.aspx?id=***),用户查看介绍之后,如果愿意下载,就会点击下载链接,这个链接也是一个页面(假设为download.aspx?id=***),我们就可以得出结论,只要是用户通过我们的网站下载这些资源,那么在下载资源之前访问那个页面(简称前导页,下同)一定是details.aspx,因此我们就可以得出结论只要是下载之前的前导页不是details.aspx这个页面,那个这个下载请求一定是别的网站盗链(其实还可以放宽一点,在下载之前的前导页一定是本站的页面,也还可以要求更紧一点,下载之前访问的页面的id值一定要与下载的id值一致,这就看大家的实际要求了)! 有了这个推论之后,我们就可以动手写代码了:
using System;
using System.IO;
using System.Web; /// <summary>
/// 说明:DownloadHandler是一个防盗链的类,它可以防止本站资源被别的网站盗用
/// 日期:2010-1-11
/// 首发地址:http://www.17aspx.com
/// </summary>
public class DownloadHandler:IHttpHandler
{
    public DownloadHandler()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }     #region IHttpHandler 成员
    /// <summary>
    /// 指示IHttpHandler 实例是否可再次使用
    /// </summary>
    public bool IsReusable
    {
        get { return true; }
    }
    /// <summary>
    /// 处理请求的方法
    /// </summary>
    /// <param name="context">它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。</param>
    public void ProcessRequest(HttpContext context)
    {
        Uri referrerUri = context.Request.UrlReferrer;//获取下载之前访问的那个页面的uri
        Uri currentUri = context.Request.Url;
        if (referrerUri == null)//没有前导页,直接访问下载页
        {
            //输出提示,可以根据自身要求完善此处代码
        

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号