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里面进行一系列验证操作实现。
浙公网安备 33010602011771号