Dar*_*n S 3 c# asp.net ssl https kentico
我想知道 Kentico 是否有一种“最佳实践”方法来确保在特定页面类型上将Requires SSL属性设置为Yes,而不从父页面继承该属性。
我已经对此进行了研究并实施了一个可行的解决方案(如下),但我很想知道是否有更好的“开箱即用”解决方案,但我可能忽略了。
我们正在使用 Kentico v8.2 和 ASPX + 门户页面类型。
我们的技术要求
我们的用例场景
用户浏览列出职位空缺的页面。用户打开包含申请表的特定职位空缺页面。由于页面是通过安全连接提供的,因此用户可以放心地将个人详细信息输入到申请表中。
考虑的解决方案
我能找到的最接近的“开箱即用”解决方案是将父列表页面设置为Require SSL = Yes然后在子页面上继承它,但是这不符合我们允许提供列表页面的技术要求通过 HTTP。
我还决定不在每个子页面上手动设置Requires SSL = Yes,因为我不想把这个负担放在 CMS 编辑器上,给他们更多不必要的权限并打开它以应对人为错误。
当前解决方案
所以我最终编写了一个自定义事件处理程序来设置文档插入或文档更新事件上的 Requires SSL 属性。
最初我是基于页面类型 (Node.ClassName) 执行此操作,但将其更改为基于字段值,以便我可以通过简单地添加字段而不重构我的代码和部署 DLL 来更轻松地将其应用于其他页面类型。
[CustomEvents]
public partial class CMSModuleLoader
{
private class CustomEvents : CMSLoaderAttribute
{
public override void Init() {
DocumentEvents.Insert.Before += Document_Insert_Before;
DocumentEvents.Update.Before += Document_Update_Before;
}
void Document_Insert_Before(object sender, DocumentEventArgs e)
{
SetRequiresSSL(e.Node);
}
void Document_Update_Before(object sender, DocumentEventArgs e)
{
SetRequiresSSL(e.Node);
}
private void SetRequiresSSL(TreeNode node)
{
//if RequiresSecureConnection field is equal to true
if (node.GetBooleanValue("RequiresSecureConnection", false))
{
//if Requires SSL is not Yes
if (node.RequiresSSL != 1)
{
//set Requires SSL
node.RequiresSSL = 1;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
相关网址
如果您在页面类型上使用系统属性,则无需任何自定义即可开箱即用,并且仍然可以编辑:
这样,基于此页面类型创建的所有页面都将预先选择 RequiresSSL。而且还是可以调节的。
大卫
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |