我希望对媒体资产的请求表现得像对页面/项目的请求。也就是说,如果用户未登录,他们将被退回到登录页面,并返回他们最初请求的项目。
我可以通过删除外网/匿名用户的读取权限来限制对媒体资产的访问。这可行,但用户被发送到“noaccess”页面(在配置中定义),然后返回以“noaccess”页面作为引荐来源登录。我想知道是否有办法让媒体请求首先检查身份验证而不是访问级别(可能使用自定义处理程序)或扩展处理“禁止访问”请求的方式?
我希望对媒体资产的请求表现得像对页面/项目的请求。也就是说,如果用户未登录,他们将被退回到登录页面,并返回他们最初请求的项目。
我可以通过删除外网/匿名用户的读取权限来限制对媒体资产的访问。这可行,但用户被发送到“noaccess”页面(在配置中定义),然后返回以“noaccess”页面作为引荐来源登录。我想知道是否有办法让媒体请求首先检查身份验证而不是访问级别(可能使用自定义处理程序)或扩展处理“禁止访问”请求的方式?
我检查了Sitecore.Resources.Media.MediaRequestHandler
类的代码,它的工作原理如下:
<site name="yoursite" loginPage="">
部分中设置的站点登录页面。如果未设置此 loginPage,Sitecore 将重定向到<setting name="NoAccessUrl" />
web.config 中的设置。我假设您已将 loginPage 设置设置为您的登录页面。如果这不是所需的行为,您可以为 MediaRequestHandler 创建一个自定义处理程序。
从 MediaRequestHandler 中查看处理访问权限不足的部分代码:
using (SecurityDisabler securityDisabler = new SecurityDisabler())
{
media = MediaManager.GetMedia(mediaRequest.MediaUri);
}
if (media != null)
{
Assert.IsNotNull(Context.Site, "site");
if (Context.Site.LoginPage != string.Empty)
{
loginPage = Context.Site.LoginPage;
}
else
{
loginPage = Settings.NoAccessUrl;
}
itemNotFoundUrl = loginPage;
}
else
{
itemNotFoundUrl = Settings.ItemNotFoundUrl;
}
if (!Settings.RequestErrors.UseServerSideRedirect)
{
HttpContext.Current.Response.Redirect(itemNotFoundUrl);
}
else
{
HttpContext.Current.Server.Transfer(itemNotFoundUrl);
}
请参阅这篇博文,了解如何创建自定义 MediaHandler