2014-09-03 97 views
1

在我的應用程序中,認證方案基於用戶和角色。具有特定角色的用戶可以訪問特定的操作方法。Play框架2.2:如何在java中獲取當前控制器和操作

要實現這一點,我已經做了以下

1.Write自定義動作與動作

public class Authorization extends play.mvc.Action.Simple { 
    public Promise<Result> call(Context ctx) throws Throwable { 
     //check access 
     return delegate.call(ctx); 
    } 
} 

2.Annotate控制器

@With(actions.Authorization.class) 
public class Upload extends Controller { 
    .... 
} 

在我的行爲我有用戶是訪問在會議中。我想獲得當前的控制器和操作,以便我可以對用戶進行身份驗證。有什麼辦法嗎?

我已閱讀有關使用參數創建自定義註釋,並在每個控制器傳遞參數來標識操作。但是,如果我錯誤地寫了錯誤的動作名稱,而複製粘貼,似乎很多工作和錯誤容易。

感謝

+0

你正在尋找一個控制器對象,或只是其中的控制器伏於動作的標識符(即字符串)的參考? – paulk23 2014-09-03 15:23:25

+0

兩者都有效。我正在尋找控制器和方法,字符串和對象都可以。 – hridayesh 2014-09-04 05:47:38

+0

那麼你會在'Authorization'類中有一個很大的'if ... else'結構嗎?您應該在控制器或方法級別定義執行該方法所需的角色,並在您的Authorization類中進行檢查。這將是真的不容易出錯。 – c4k 2014-09-07 07:14:15

回答

0

您可以使用context.request().path()獲得與所使用的路徑的字符串。這不包括任何查詢參數,所以如果你想要它們,你可以使用同一個對象的getQueryParameteruri(完整url)方法。

如果您需要比此更多的信息,您可以使用context.args。這會給你用下面的按鍵(在播放2.2 ATLEAST)地圖:

ROUTE_VERB   -> The HTTP verb used (ex: GET) 
ROUTE_ACTION_METHOD -> The method called (ex: getUserFavorites) 
ROUTE_CONTROLLER -> Controller class (ex: controllers.api.UsersController) 
ROUTE_COMMENTS  -> ??? 
ROUTE_PATTERN  -> THE URL used (ex: users/favorites) 
+0

謝謝! ROUTE_CONTROLLER和ROUTE_ACTION_METHOD給出了期望的結果。 – hridayesh 2014-09-05 07:53:52

相關問題