HttpHandler对象实现防盗链
HttpModule对象的概述与使用
----对于HTTP请求而言,HttpModule是HTTP请求的“必经之路”,它是可以在该HTTP请求传递到最终的“请求处理中心(HttpHandler)”进行处理之前做一些额外工作,或者在某些情况下终止满足一些条件的HTTP请求,从而起到了一个过滤器的作用。
----HttpModule有多个,每次HTTP请求都将逐一通过每个HttpModule。
----HttpModule和HttpApplication对象是直接交互的。
接下来带大家进入使用HttpHandler对象实现防盗链
防盗链的概述
防盗链技术是Web项目开发过程中必定会用到的技术,否则网站的资源会被其他网站引用,并造成损失。
----一些不良网站为了在不增成本的前提下扩充自己站点的内容,经常盗用其他网站的资源,这种现象称为盗链。
防盗链演示与防盗链操作
----防盗链需求
1.创建一个网站,网站下的Images文件夹中放入jpg图片资源。
2. 创建第二个网站,网站下有一个页面引用了上一个网站中的jpg图片资源,结果不能正常显示图片资源,而会显示一个表示错误的图片。
----创建站点
1.创建被盗链站点,创建Images文件夹,然后添加一个aspx页面,插入三张图片。代码如下
aspx显示试图代码:
<form id="form1" runat="server">
<div class="d1">
<img src="Images/01.jpg" />
<img src="Images/02.jpg" />
<img src="Images/03.jpg" />
</div>
</form>
css代码:
<style>
.d1 {
width:400px;
height:240px;
}
.d1 img {
width:100%;
height:100%;
}
</style>
2.创建盗链站点。在同一个解决方案再建一个项目,在项目里创建第二个网站,引用第一个网站提供的三幅图片,代码如下:
aspx显示试图代码:
<form id="form1" runat="server">
<div class="d1">
<img src="http://localhost:50836/Images/01.jpg" />
<img src="http://localhost:50836/Images/02.jpg" />
<img src="http://localhost:50836/Images/03.jpg" />
</div>
</form>
效果图:
----防盗链操作
显而易见,第二个网站盗取了第一个网站的图片资源,下面通过HttpHandler解决盗链。在第一个网站中添加HttpHandler类,代码如下
1.编写HttpHandler类,代码如下
public class PreventLink : IHttpHandler //要调用IHttpHandler接口
{
public bool IsReusable => false;
public void 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 errorImagePath = context.Request.PhysicalApplicationPath + "Images/04.jpg";
//发送到客户端
context.Response.WriteFile(errorImagePath);
}
else
{
//如果不是为盗链就显示,本来就要显示的图片
context.Response.WriteFile(context.Request.PhysicalPath);
}
}
}
2.配置相关的配置文件,代码如下:
在Web.config中配置实现当请求Images文件夹中的jpg图片时,由PreventLink类处理的功能
<system.webServer>
<handlers>
<add verb="*" path="Images/*.jpg" type="防盗链1.PreventLink" name="handler"/>
</handlers>
</system.webServer>
当其他网站访问本站点图片资源时,一律显示在PreventLink类中设置的错误图片
其他站点,访问效果如下:
以上就是使用HttpHandler对象实现防盗链,如果不是很懂,多敲敲就会了,毕竟熟能生巧嘛!