gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:39:30 25 4
gpt4 key购买 nike

我想知道 Kentico 是否有“最佳实践”方法来确保在特定页面类型上将 Requires SSL 属性设置为 Yes,而不继承来自父页面的属性。

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

我们使用 Kentico v8.2 和 ASPX + 门户页面类型。

我们的技术要求

  1. 通过 HTTP 或 HTTPS 提供父列表页面
  2. 仅通过 HTTPS 提供子页面

我们的用例场景

用户浏览了一个列出职位空缺的页面。用户打开包含申请表的特定职位空缺页面。由于该页面是通过安全连接提供的,因此用户可以放心地将个人详细信息输入到申请表中。

考虑的解决方案

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

我还决定不在每个子页面上手动设置 Requires SSL = Yes,因为我不想给 CMS 编辑带来这个负担,给他们更多的权限并打开它人为错误。

当前解决方案

所以我最终编写了一个自定义事件处理程序来为 Document InsertDocument Update 事件设置 Requires SSL 属性。

最初我是基于页面类型 (Node.ClassName) 执行此操作,但将其更改为基于字段值,以便我可以更轻松地将其应用于其他页面类型,只需添加一个字段而无需重构我的代码和部署一个动态链接库。

[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;
}
}
}
}
}

相关网址

最佳答案

如果您在页面类型上使用系统属性,则无需任何自定义即可开箱即用,并且仍可编辑:

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

requiresSSL

这样所有基于此页面类型创建的页面都将预选 RequiresSSL。而且它仍然是可调的。

大卫

关于c# - 如何在特定页面类型而不是父页面上要求 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com