【问题标题】:Sitecore 6.5: how to handle 403 on media itemSitecore 6.5:如何处理媒体项目上的 403
【发布时间】:2014-05-05 11:01:36
【问题描述】:

我在 web.config 中设置了一个自定义管道来处理 403 和 404 消息传递和行为。代码长这样……

public class NotFoundProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
    public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        //handle 404 & 403 processing of the requested item
    }
}

它适用于任何请求的“页面”。

但是,媒体库项目似乎并未由该管道处理。我在http://sdn.sitecore.net/upload/sitecore6/handling_http_404_a4.pdf找到了这段文字

如果 IIS 使用 ASP.NET 处理请求,并且没有处理器中止请求 httpRequestBegin 管道,请求的 URL 不对应 到 Sitecore 媒体项目、上下文站点中的内容项目或 文件,然后 Sitecore 激活由值指定的 URL /configuration/sitecore/settings/setting 元素的属性 名称为 ItemNotFoundUrl 的 web.config。

这表明媒体项目的处理方式不同,但我找不到任何关于在管道中捕获媒体项目请求的参考。有没有办法做到这一点,或者其他解决方法允许我的自定义 403/404 处理媒体项目?

谢谢, 萨德

【问题讨论】:

  • 所以我想您已经对某些媒体项目设置了安全性以拒绝访问/中断继承?
  • 正确,我破坏了一些 PDF 的继承,因此匿名者没有读取权限。

标签: sitecore sitecore6


【解决方案1】:

您是对的,媒体由不同的处理器处理,该处理器在web.config<system.webServer><handlers><system.web><httpHandlers> 中定义。媒体项目请求不通过通常的 Sitecore 管道。

具体的处理程序是: <add verb="*" path="sitecore_media.ashx" type="Sitecore.Resources.Media.MediaRequestHandler, Sitecore.Kernel" name="Sitecore.MediaRequestHandler"/>

如果您需要添加自己的自定义逻辑然后添加到DoProcessRequest(),您可以使用dotPeek decompiler查看当前逻辑。

说了这么多,如果您正确设置了权限,Sitecore 应该开箱即用地处理这个问题。用户应该被重定向到拒绝访问页面,或者您在Settings.NoAccessUrl 中设置的任何内容(您可以将其更改为您的登录页面)。

确保您为正确的用户破坏了继承,通常是extranet\Anonymous(而不是default/Anonymous),但如果您更改了<site> 元素中的域,那么相应的<domain>\Anonymous 用户。

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多