阻止非用户访问静态资源

时间:2012-01-05 20:32:42

标签: asp.net ihttphandler ihttpmodule

我正在努力限制只有登录用户访问静态PDF文件。我只想在没有正确凭据的请求到来时使用资源中的服务器端重定向。

我可以使用IHttpHandler并设置path值,但我不想手动提供该文件。我希望登录用户的请求直接传递,更像是IHttpModule,除了我无法设置限制模块将作用的文件的路径。

有没有办法通过处理程序传递请求,或者限制模块的路径?

修改

注意我想将用户重定向到具有特定查询字符串参数的登录页面也可能有用,如果登录成功,则将用户重定向回资源。

1 个答案:

答案 0 :(得分:3)

如果这些是真正的静态资源(存在于磁盘上),那么您可以将它们粘贴在一个文件夹中,并使用web.config中的location element来限制该文件夹

<location path="MyPDFs">
   <system.web>
      <authorization>
         <deny users="?"/>
      </authorization>
   </system.web>
</location>

这可以防止任何未经授权的用户访问您网站中MyPDFs文件夹中的任何文件。

如果您只想要这些文件的子集,那么您可以创建一个子目录,并以类似的方式保护它。

<location path="PDF/SecureSubDirectory">
   <system.web>
      <authorization>
         <deny users="?"/>
      </authorization>
   </system.web>
</location>

UPDATE:

  

注意我想将用户重定向到a可能也很有用   具有特定查询字符串参数的登录页面,用于重定向用户   如果登录成功,则返回资源。

默认情况下,在ASP.Net

中使用Forms Authentication时,这都是为您处理的

由于用户尚未通过身份验证而导致资源失败的任何请求都将自动重定向到web.config中定义的已配置登录页面。

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">
    </forms>
  </authentication>
</system.web>

它附加一个查询字符串参数,该参数引用最初请求的资源。用户成功进行身份验证后,会将其重定向回原来请求的URL。

这一切都融入了框架:)