• 在其他系统Iframe中显示SharePoint 页面


    前段时间在做一个项目,要求将SharePoint 的 OWA(Office Web Apps)中的文档显示页面嵌入到另外一个OA系统中,提供给用户可以通过浏览器查看SharePoint文档的能力。

    嵌入我们能想到的方法就是 Iframe,这里我们暂且忽略可能存在的SSO问题。

    当将SharePoint页面嵌入到Iframe中的时候,遇到了一个问题。

    截图01

    “此网页不能显示在一个框架中 ……”,后来经过反复的查找原因,也参考了国外的网站内容。

    X-Frame-Options 就是它折磨了我一天多。后来在发现在我买了很久却只看了一章的书里有这个内容的介绍,《白帽子讲Web安全》中有一章就介绍了 X-Frame-Options,主要用来防止 ClickJacking(点击劫持)。是一种安全策略。

    这个时候就不难理解SharePoint为什么会出现这种错误了。

    错误原因找到了,接下来就是 解决它。

    解决的思路是 用程序将 X-Frame-Options 删除掉。这样做有些冒险。但在内网环境中,我倒觉得完全可以一试。

    具体方法

    1. 在VS中创建一个SharePoint 解决方案项目,选择场解决方案。

    2. 在项目中添加一个Feature,并为Feature添加Event事件。

    3. 右键点击项目名称,选择新建项。选择ASP.Net模块。

    截图00

    4. 输入以下代码。

    public class PermissiveXFrameHeaderModule : IHttpModule
        {
            private const string XFRAMEOPTIONS_HEADERNAME = "X-FRAME-OPTIONS";

            private void context_PreSendRequestHeaders(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;
                application.Response.Headers.Remove("X-FRAME-OPTIONS");
            }

            public void Dispose()
            {
            }

            public void Init(HttpApplication context)
            {
                context.PreSendRequestHeaders += new EventHandler(this.context_PreSendRequestHeaders);
            }
        }

    5. 在Feature的事件程序中 添加代码如下

    public class Feature1EventReceiver : SPFeatureReceiver
        {

            public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                SPWebApplication application = (SPWebApplication)properties.Feature.Parent;
                foreach (SPWebConfigModification modification in this.Modifications)
                {
                    application.WebConfigModifications.Add(modification);
                }
                application.WebService.ApplyWebConfigModifications();
                application.Update();
            }

            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPWebApplication application = (SPWebApplication)properties.Feature.Parent;
                foreach (SPWebConfigModification modification in this.Modifications)
                {
                    application.WebConfigModifications.Remove(modification);
                }
                application.WebService.ApplyWebConfigModifications();
                application.Update();
            }

            private SPWebConfigModification[] Modifications
            {
                get
                {
                    SPWebConfigModification[] modificationArray = new SPWebConfigModification[1];
                    SPWebConfigModification modification = new SPWebConfigModification("add[@name='PermissiveXFrameHeaderModule']", "configuration/system.webServer/modules");
                    modification.Owner = "PERMISSIVEXFRAME";
                    modification.Sequence = 0;
                    modification.Type = 0;
                    modification.Value = "<add name="PermissiveXFrameHeaderModule" type="XMlFrame.PermissiveXFrameHeaderModule, XMlFrame,Version=1.0.0.0, Culture=neutral, PublicKeyToken=16937942f8602783" />";
                    modificationArray[0] = modification;
                    return modificationArray;
                }
            }

    6. 最后一步 就是部署它 就ok了

    好吧,我承认我这个参考了老外写的东西,但日子有点久了,实在不知道他是谁了 blog地址是什么了。

  • 相关阅读:
    什么是method swizzling
    手机安全卫士——手机防盗页面
    手机安全卫士——在设置中心 自定义view和自定义属性
    手机安全卫士——主界面的开发
    手机安全卫士——闪屏页相关处理
    Android开发学习——自定义View
    C#开发学习——SqlHelper的应用
    基本的SQL语句
    C#开发学习——常用的正则表达式
    C#开发学习——存储过程
  • 原文地址:https://www.cnblogs.com/yunliang1028/p/3243246.html
Copyright © 2020-2023  润新知