如何在特定页面类型上要求SSL,而不是在父页面上

时间:2015-12-17 01:07:12

标签: c# asp.net ssl https kentico

我想知道Kentico是否采用“最佳实践”方式确保需要SSL 属性在特定页面类型上设置为,而不继承父页面中的属性。

我已经对此进行了研究,并实施了一个可行的解决方案(下方),但我很想知道是否有一个更好的“开箱即用”解决方案,我可能忽略了。

我们正在使用Kentico v8.2和ASPX + Portal页面类型。

我们的技术要求

  1. 通过HTTP或HTTPS
  2. 提供父列表页面
  3. 仅通过HTTPS提供子页面
  4. 我们的用例场景

    用户浏览列出职位空缺的页面。用户打开一个特定的职位空缺页面,其中包含申请表。当用户通过安全连接提供页面时,用户有信心在申请表中输入个人详细信息。

    考虑解决方案

    我能找到的最接近“开箱即用”的解决方案是将父列表页面设置为需要SSL =是,然后在子页面上继承此项,但这不符合我们的要求允许通过HTTP提供列表页面的技术要求。

    我还决定不在每个子页面上手动设置 Requires SSL = Yes ,因为我不想将这个负担放在CMS编辑器上,给予他们超过必要的权限并打开它人为错误。

    当前解决方案

    所以我最终编写了一个自定义事件处理程序来设置文档插入文档更新事件的Requires SSL属性。

    最初我是基于页面类型(Node.ClassName)执行此操作,但是将其更改为基于Field值,以便我可以通过简单地添加字段而不重构我的代码和部署来更轻松地将其应用于其他页面类型一个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;
                    }
                }
            }
        }
    }
    

    相关网址

1 个答案:

答案 0 :(得分:4)

您可以在没有任何自定义的情况下实现开箱即用,如果您在页面类型上使用系统属性,仍然可以进行编辑:

  • 打开您的页面类型
  • 添加新字段
  • 选择字段类型:页面字段
  • 选择组:节点字段
  • 选择字段名称:RequiresSSL
  • 输入默认值:1(此类型为YES)
  • 在编辑表单中取消选择显示字段,以便编辑看不到它。

requiresSSL

这样,基于此页面类型创建的所有页面都将预先选择RequiresSSL。它仍然可以调整。

大卫