2012-06-11 73 views
0

我有一個網站,輸出Excel報告與超鏈接回安全內容。其中一個環節是這樣的......用戶無效,從外部鏈接

http://www.[site].com/externalLinkDigester?externalSession=[SHA Encrypted Text] 

查詢字符串參數(externalSession)是一個獨特的字母數字字符串,僅24小時內有效,只能由誰創建報表的用戶訪問。我的控制器看起來是這樣的......

class ExternalLinkDigester{ 

    def springSecurityService; 

    def index = { 
     def currentUser = springSecurityService?.currentUser 

     if (!currentUser){ 
      redirect(controller:'login') 
     } 

     def request = ExternalSession.findByName(params.externalSession); 

     if (request.isExpired(){ 
      //show expired content page 
     } 


     if (sameUser(currentUser, request.user){ 
      //show content 
     }else{ 
      redirect(controller:'login') 
     } 



    } 
} 

問題是,不管是什麼springSecurityService.currentUser總是空的形式來Excel之類的外部程序,甚至當我點擊鏈接之前但是登錄的時候,如果我複製並粘貼到瀏覽器中的鏈接似乎工作正常。幫幫我!

如何以這種方式安全訪問內容?

+0

如果鏈接位於其他應用程序(如MS Word或Outlook)中,它可以工作嗎? – Ritesh

回答

2

Excel是否可能打開與您登錄的瀏覽器不同的瀏覽器(例如,您使用Firefox登錄並單擊Excel中的鏈接時,默認打開Internet Explorer中的鏈接)。新的瀏覽器將沒有會話cookie,因此「currentUser」將顯示爲空。

+0

這是一個新標籤的瀏覽器。 –

+0

什麼是您的瀏覽器和版本?據我所知,正常行爲是所有標籤都可以重複使用同一個會話,如果它是一個cookie。除非您的網站使用無Cookie的會話機制,因此在URL中傳遞一個特殊的標識符字符串作爲參數。但是,根據您的示例,這似乎不是這種情況,因爲我沒有看到任何其他參數。 – Tri