如何保护 Sitecore 中的 CM 站点?
How to secure the CM site in Sitecore?
我正在尝试锁定 CM(主)站点。用户将必须登录才能查看该站点。
下面的配置被添加到 sitecore.config。不幸的是,下面的实现仅适用于主页(例如 /)。
当匿名用户访问 /hello-world 时,他们会看到一个没有任何内容的 "white" 页面。它不会将他们定向到登录页面。
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<sites>
<site name="website"
set:requireLogin="true"
set:domain="sitecore"
set:loginPage="/sitecore/login"
set:targetHostName="master.website.com"
set:scheme="http" />
</sites>
</sitecore>
</configuration>
访问主页会将我带到
login page
但是,如果我手动输入内部页面 URL,我会得到以下信息:
white page
要使其正常工作,只需更改 "website" 配置节点的 2 个设置 - requireLogin
和 loginPage
。所以你肯定设置正确。
我以前遇到过类似的 "blank page" 问题,它与 ItemNotFoundUrl
设置的一些错误配置有关。如果 "hello-world" 页面不存在,也可能是你的情况。
你能试试这个吗:
<site name="website" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content" startItem="/hello-world" database="master" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="10MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="5MB" filteredItemsCacheSize="2MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" requireLogin="true" loginPage="/sitecore/login/Default.aspx" />
亮点:
- startItem : 设置为 hello-world 页面(假设这是主页项目)
- database : 设置为master(取决于你的测试用例,你也可以使用web db)
- loginPage : 重定向到 Sitecore 登录页面
- requireLogin : 强制登录,设置为 TRUE
经过进一步调查,并联系了 sitecore 社区,我发现 sitecore 8 update 5 (mvc) 中存在一个错误。安全检查工作不正常。
修复方法如下:
1.添加继承自SecurityCheck的管道。
public class SecurityCheck : Sitecore.Pipelines.RenderLayout.SecurityCheck
{
private RequestBeginArgs originalArgs;
public virtual void Process(RequestBeginArgs args)
{
originalArgs = args;
Process(new RenderLayoutArgs((System.Web.UI.Page)new Sitecore.Web.UI.HtmlControls.Page(), (Item)null));
}
protected override bool HasAccess()
{
SiteContext site = Context.Site;
if (site != null && site.RequireLogin && (!Context.User.IsAuthenticated && !this.IsLoginPageRequest()))
{
originalArgs.AbortPipeline();
return false;
}
if (site == null || site.DisplayMode == DisplayMode.Normal || (Context.User.IsAuthenticated || !(PreviewManager.GetShellUser() == string.Empty)) || this.IsLoginPageRequest())
return true;
originalArgs.AbortPipeline();
return false;
}
}
2。将此处理器添加为第一个处理器
<mvc.requestBegin>
<!-- security check for site -->
<processor type="Namespace.SecurityCheck, Assembly"/>
</mvc.requestBegin>
我正在尝试锁定 CM(主)站点。用户将必须登录才能查看该站点。
下面的配置被添加到 sitecore.config。不幸的是,下面的实现仅适用于主页(例如 /)。 当匿名用户访问 /hello-world 时,他们会看到一个没有任何内容的 "white" 页面。它不会将他们定向到登录页面。
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<sites>
<site name="website"
set:requireLogin="true"
set:domain="sitecore"
set:loginPage="/sitecore/login"
set:targetHostName="master.website.com"
set:scheme="http" />
</sites>
</sitecore>
</configuration>
访问主页会将我带到 login page 但是,如果我手动输入内部页面 URL,我会得到以下信息: white page
要使其正常工作,只需更改 "website" 配置节点的 2 个设置 - requireLogin
和 loginPage
。所以你肯定设置正确。
我以前遇到过类似的 "blank page" 问题,它与 ItemNotFoundUrl
设置的一些错误配置有关。如果 "hello-world" 页面不存在,也可能是你的情况。
你能试试这个吗:
<site name="website" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content" startItem="/hello-world" database="master" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="10MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="5MB" filteredItemsCacheSize="2MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" requireLogin="true" loginPage="/sitecore/login/Default.aspx" />
亮点:
- startItem : 设置为 hello-world 页面(假设这是主页项目)
- database : 设置为master(取决于你的测试用例,你也可以使用web db)
- loginPage : 重定向到 Sitecore 登录页面
- requireLogin : 强制登录,设置为 TRUE
经过进一步调查,并联系了 sitecore 社区,我发现 sitecore 8 update 5 (mvc) 中存在一个错误。安全检查工作不正常。
修复方法如下: 1.添加继承自SecurityCheck的管道。
public class SecurityCheck : Sitecore.Pipelines.RenderLayout.SecurityCheck
{
private RequestBeginArgs originalArgs;
public virtual void Process(RequestBeginArgs args)
{
originalArgs = args;
Process(new RenderLayoutArgs((System.Web.UI.Page)new Sitecore.Web.UI.HtmlControls.Page(), (Item)null));
}
protected override bool HasAccess()
{
SiteContext site = Context.Site;
if (site != null && site.RequireLogin && (!Context.User.IsAuthenticated && !this.IsLoginPageRequest()))
{
originalArgs.AbortPipeline();
return false;
}
if (site == null || site.DisplayMode == DisplayMode.Normal || (Context.User.IsAuthenticated || !(PreviewManager.GetShellUser() == string.Empty)) || this.IsLoginPageRequest())
return true;
originalArgs.AbortPipeline();
return false;
}
}
2。将此处理器添加为第一个处理器
<mvc.requestBegin>
<!-- security check for site -->
<processor type="Namespace.SecurityCheck, Assembly"/>
</mvc.requestBegin>