Jie

心若无尘,一花一世界,一鸟一天堂;心若静,已如涅磐,风声物语,皆可成言.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

实现IHttpHandler接口来控制文件下载权限

Posted on 2008-08-03 17:04  JieNet  阅读(1008)  评论(2编辑  收藏  举报

今天碰到了一个很棘手的问题,由于原来从来没做过这方面的考虑,所以一上来就把我搞蒙了,还好baidu,google了半天(连迅雷都用上了。。。)终于解决了这个问题。

 

如果你想控制某个.aspx页面不让未授权用户访问,那么写个web.config就OK了,但是如果你想控制rar,zip……等等文件的访问就不是这么简单的了,有人说隐藏下载地址,用session判断啊什么的,我觉得这纯属是对付,万一哪个哥们没事干就再那猜地址呢,如果是给小日本写程序,那这么写没问题。有一种办法不错,也不难。嘿嘿,为什么.aspx页面写个web.config就可以控制了呢,因为你服务器上装了.net(想抽我是吧?哈哈),因为aspreg_iis.exe后iis中映射里的.aspx等等文件的受理请求全部移交到了c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll这个文件来受理(版本不同,文件不同),所以它知道在你没有登录的时候把你直接推到login.aspx页面去,这也就是为什么.aspx文件能控制访问,而rar,zip等等文件无法控制了。

 

继续说,为什么aspx文件能控制呢,因为M$在aspnet_isapi.dll里书写了关于aspx类型的处理,所以只要写个关于rar文件的处理就OK了。

步骤如下:

1)写一个实现了IHttpHandler接口的类。

将此文件保存到~/App_Code/RarFileHandler.cs

代码如下(里面有点多余代码是为了其他的判断):

 

Code

 

2)写~/Web.config文件,内容如下:

 

Code

 

3)配置一下IIS的类型映射

网站目录->属性->配置->映射->添加

 

可执行文件:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

扩展名:.rar

 

如图:

 

4)去厕所释放一下。。。