2011-09-19 54 views
0

編輯:Playframework的安全模塊沒有重定向到原始URL登錄後

我運行Ubuntu 10.04這個問題似乎在Chrome(7.0.517.44)發生,然而,一切工作正常的Firefox 。

這很奇怪。我有另一個應用程序,其中redirectToOriginalUrl在兩種瀏覽器上均處於'dev'模式下正常工作,但不能在'prod'模式下工作(再次在兩個瀏覽器上)。哇,我不知道發生了什麼!

問題:

我正在與Playframework奇怪的錯誤(1.1.1版本),其中redirectToOriginalURL沒有安全模塊中工作。

我有2個控制器Application.java和NameC.java

視圖應用/ index.html中顯示一個簡單的頁面的鏈接的動作在NameC.java(NameC.index())

NameC.java受註解保護@With(Secure.class)

以下是我期待的流程。首先用戶轉到應用程序主頁。在那裏,他們點擊鏈接,將他們帶到NameC.index。但是,由於NameC受Secure模塊保護,因此應將用戶帶到登錄表單中(因爲他們尚未登錄),並且在成功登錄後,他們應該看到由NameC.index提供的頁面

I獲取登錄表單,但成功登錄後,用戶將被帶到Application.index我嘗試在Secure.redirectToOriginalURL()方法中放置打印語句,並且好像flash url中不存在「url」。

這裏是我的代碼:

Application.java

public class Application extends Controller { 
    public static void index() { 
     render(); 
    } 
} 

應用/ index.html的

<a href="@{NameC.index()}">Click here</a> 

NameC.java

@With(Secure.class) 
public class NameC extends Controller { 
    public static void index() { 
    render(); 
    } 
} 

NameC/index.html的

You should see this after a successful login. 
<a href="@{Secure.logout()}">logout</a> 

我相信我失去了一些東西非常基本的......任何人都可以請幫我找出我錯過了什麼。

+0

我們能否看到您的安全實施?你確定,你不重定向,壓倒一些方法? –

+0

@ Zenklys我沒有改變任何Secure.java我只是試着再次運行一切,並意識到,這在Firefox的正常工作,但在Chrome(7.0.517.44)失敗。我正在運行Ubuntu 10.04。 – Parag

+0

查看瀏覽器控制檯/檢查器(Firebug&Chrome檢查器)以查看是否出現問題。 –

回答

3

原始URL應該存儲在login函數的flash範圍內。如果您正在運行安全模塊的未修改的版本,應該有一行代碼是這樣的:

存儲在閃存範圍
flash.keep("url"); 

數據僅可爲下一個請求,然後將其清除。 Flash範圍的內容不存儲在服務器中,而是存儲在cookie中,因此,如果您使用Firebug或類似軟件調查請求,則應該能夠看到名爲PLAY_FLASH的cookie,其中包含您的原始URL。如果由於某種原因,Cookie不存在,那麼您的問題就出現了。

接下來,您authenticate功能應該(在驗證成功後)這樣調用的redirectToOriginalURL方法,嘗試檢索從閃存範圍原始URL(如你所說):

String url = flash.get("url"); 

如果URL沒有在閃光範圍內可用的時間更長,最有可能的解釋是在loginauthenticate請求之間發出了另一個請求,從閃存範圍中清除存儲值。同樣,Firebug將很容易地揭示這是否是原因 - 只需查看Net標籤即可查看發生的所有網絡流量。

+0

確實是另一個請求正在作爲AJAX調用。這是一個生成圖像的請求,所以我無法在Firebug的'NET'部分的HTML選項卡中看到它。謝謝您的幫助。 – Parag

0

redirectTo使用301狀態。它不應該在任何瀏覽器上工作,但仍然是。這可能發生...

相關問題