ASP.NET + ISAPI Filter 进行Web目录下的文件权限管理

        在进行B/S系统开发时,经常会涉及到文档下载的问题。许多人选择了用数据库进行文件存放的容器,虽然这样可以很好的做到权限控制和在安全性上面的把握,但很大程度上影响了系统的性能和内存的开销。另外就是存放在非WEB目录下,然后通过文件流处理输出到客户浏览器,道理和前面的一样,开销太大。这两种方法最大的弊端就是在大文件处理上,显得非常鸡肋,把几十兆甚至几百兆的文件读入内存,很大程度上是不现实的和不可行的。
        其实ISAPI对于VC出生的程序员来说并不陌生,既然是在微软的操作系统上,就应该把微软自己的东西好好得利用起来,让我们来看看用ASP.NET + ISAPI实现最简单的文件权限管理。

                       
                                                              文件下载过程图

1、建立一个VC工程,选择ISAPI扩展。

2、选择工程为ISAPI Filter

3、选定“预处理请求标题后”复选框


4、写入代码
        我们现在要截断所有目录 /files/ 下的文件请求。
        加入代码:
        char header[4096];
        DWORD dwLen = sizeof(header);
        pHeaderInfo->GetHeader(pCtxt->m_pFC, "url", header, &dwLen);
        CString sUrl(header);
        if(sUrl.Find("/files/") >= 0 && sUrl.Right(1) != "/")
       {
            pHeaderInfo->SetHeader(pCtxt->m_pFC, "url", "/Error.aspx");
       }

      当用户请求的url为/files/目录下的文件时,我们将它转向到error.aspx。


5、建立C# Web Application 工程
只要在页面中使用Server.Transfer到files目录下的文件,就可以避开ISAPI Filter的截断操作,
这样只能说是一个技巧吧,俺也是无意之间发现的,本来是在OnUrlMap里面进行一系列验证操作实现。

posted on 2004-04-19 16:22  ACA  阅读(1324)  评论(1)    收藏  举报

导航