0

我的网页上有一个带有 pdf 文件的子文件夹。
只有在用户登录时才能访问它们,登录信息通过 Microsoft CRM 访问,并且变量存储在缓存中。
代码是用vb.net写的,webserver是IIS7。

如何防止未登录用户访问此文件夹?我一直在寻找一种解决方案,但没有找到一个适用于 CRM 登录的解决方案。

我也一直在研究 url 重写,这样用户就看不到文件的直接路径(www.abc.com/download/test.pdf),而只会看到一个非描述性的 url(www.abc .com/pdf)。但也没有让它发挥作用。

所以我对几乎任何建议都持开放态度,但我不能复制整个用户群或只想为此目的设置一个 sql 数据库。


尼古拉斯的回答适用于以下补充:


使用 fs As New FileStream("C:\www\pdf\abc.pdf", FileMode.Open)
Dim docSize As Long = fs.Length
Dim docStream(CInt(docSize)) As Byte
fs.Read(docStream, 0, CInt (docSize))
Response.ClearContent()
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "inline; filename=/_data/checkliste-4-2013-2.pdf")
Response.AddHeader ("Content-Length", docSize.ToString())
Response.BinaryWrite(docStream)
Response.End()
结束使用

4

1 回答 1

0

在我处理过的 Web 应用程序中,我们将 PDF 文件流式传输到浏览器。这样,没有人可以直接访问文件的 URL,并且由于它是一个 ASPX 页面,我们可以应用我们想要的任何安全性(即用户必须登录)。

这是类似于我使用的示例代码:

    Dim strFilePath As String = "C:\www\pdf\abc.pdf"
    Using fs As New System.IO.FileStream(strFilePath, System.IO.FileMode.Open)
        Dim docStream(fs.Length) As Byte
        fs.Read(docStream, 0, CInt(fs.Length))

        Response.ClearContent()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "inline; filename=" + System.IO.Path.GetFileName(strFilePath))
        Response.AddHeader("Content-Length", fs.Length)
        Response.BinaryWrite(docStream)
        Response.End()
    End Using
于 2013-08-23T12:34:14.733 回答