在其他系統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地址是什么了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM