2012-05-16 16 views
1

我正在寫一個PlayPlugin。在rawInvocation(request,response)方法中,我創建了一個我希望所有控制器都可以訪問的對象。什麼是實現這個目標的首選方法?每個用戶都有自己的對象。看起來播放會話還沒有創建,所以我不能將它存儲在那裏。 感謝如何從PlayPlugin傳遞對象

基督教Güldner

回答

2

那麼它是更好地覆蓋PlayPlugin.beforeActionInvocation方法:

public class MyPlugin extends PlayPlugin{ 
    @override public void beforeActionInvocation(Method actionMethod) { 
    Object myObject = ... 
    Http.Request.current().args.put("myobject", myObject); 
    } 
} 

而在你的控制器中的任何一個,你可以得到由對象:

對象myObject = Http.Request.current().args.get("myobject")

+0

謝謝。我正在使用rawInvocation,因爲我的插件處理認證(ntlm)。我能夠在請求參數中設置對象(用戶名)。但是,該對象是我想要在會話上設置的用戶名。也許我可以稍後在流程中提取它,並將其從請求參數移動到會話。我會再研究一些。 – guldner

+0

所以你正試圖創建一個插件支持活動目錄認證?我有一個模塊(https://github.com/greenlaw110/play-aaa)爲此工作。檢查https://github.com/greenlaw110/play-aaa/blob/master/src/play/modules/aaa/utils/LdapAuthenticator.java和https://github.com/greenlaw110/play-aaa/blob/master /src/play/modules/aaa/morphia/Account.java看看它是如何工作的。這個模塊的問題是現在沒有JPA impl因爲我主要在我的日常項目中使用mongodb,並且它缺少文檔。但無論如何,你可以參考源代碼 –

+0

快速瀏覽。非常令人印象深刻。這個方法與我試圖實現的不同,這只是使用ntlm的SSO。 請允許我說,對於您放入模塊的所有工作,可惜您沒有花費30分鐘的時間來解釋模塊的功能以及如何使用它。 – guldner

0

我不知道這是否是最好的或推薦的方式,但你可以,如果你想用你的插件創建一個全球性的過濾器總是添加到request.param

+0

謝謝。它似乎將它添加到請求參數是不允許的。如綠色所示,將它添加到請求參數中爲我工作。 – guldner