其他分享
首页 > 其他分享> > 使用HttpHandler对象实现防盗链

使用HttpHandler对象实现防盗链

作者:互联网

HttpModuel与HttpHandler周期图

(该图片是从网上找的,如果侵犯了作者的权益,请您联系我)

对于HTTP请求来说,HttpModule是HTTP请求的必经之路,它可以在该HTTP请求传递到最终的请求处理中心(HttpHandler)之前做一些额外的工作,或在某些情况下终止满足一些条件的HTTP请求,从而起到一个过滤器的作用

HttpHandler是HTTP请求的处理中心,负责HTTP请求的具体工作

本次主要是使用HttpHandler对象实现防盗链功能

1)

新建两个项目:A、B

A项目防盗链 B项目盗链来实现对照效果

2)

在A项目中新建一个Web窗体并且添加一个Handler类

在Web窗体中放入四张图片

在Handler类中加入以下代码

 public class PreventLink : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

        void IHttpHandler.ProcessRequest(HttpContext context)
        {
            //获取上次请求的URL
            Uri lastUrl = context.Request.UrlReferrer;
            //获取本次请求的URL
            Uri currentUrl = context.Request.Url;
            //判断是否为盗链
            if(lastUrl.Host!= currentUrl.Host || lastUrl.Port != currentUrl.Port)
            {
                //获取警告提示图片路径
                string erroImgPath = context.Request.PhysicalApplicationPath + "images/wuhu.jpg";
                //发送至客户端
                context.Response.WriteFile(erroImgPath);
            }
            else
            {
                context.Response.WriteFile(context.Request.PhysicalPath);
            }
        }
    }

 注意要实现IHttpHandler接口

3)

在配置文件web.config中的configuration里加入以下代码

<system.webServer>
    <handlers>
      <add verb="*" path="images/*.jpg" type="WebApplication1.PreventLink" name="plink"/>
    </handlers>
  </system.webServer>

4)

在B项目中添加一个Web窗体,并向其中加入A项目中的图片链接

最后运行代码,结果如下

(A项目运行结果)

(B项目运行结果)

 

标签:HTTP,请求,对象,Request,context,防盗链,HttpHandler
来源: https://blog.csdn.net/m0_50078783/article/details/117413467