Play framework 2.2:如何在java中获取当前控制器和操作

Play framework 2.2:如何在java中获取当前控制器和操作,java,playframework,playframework-2.0,playframework-2.2,Java,Playframework,Playframework 2.0,Playframework 2.2,在我的应用程序中,身份验证方案基于用户和角色。具有特定角色的用户可以访问特定的操作方法 为了实现这一点,我做了以下工作 1.编写自定义操作 public class Authorization extends play.mvc.Action.Simple { public Promise<Result> call(Context ctx) throws Throwable { //check access return delegate.cal

在我的应用程序中,身份验证方案基于用户和角色。具有特定角色的用户可以访问特定的操作方法

为了实现这一点,我做了以下工作

1.编写自定义操作

public class Authorization extends play.mvc.Action.Simple {
    public Promise<Result> call(Context ctx) throws Throwable {
        //check access
        return delegate.call(ctx);
    }
}
在我的操作中,我可以访问正在会话中的用户。我想获取当前控制器和操作,以便对用户进行身份验证。有什么办法吗

我已经阅读了有关使用参数创建自定义注释的内容,并在每个控制器中传递参数以标识操作。但如果我在复制粘贴时错误地写了错误的动作名称,那么这似乎需要做很多工作,而且容易出错

谢谢

您可以使用context.request.path获取包含所用路径的字符串。这将不包括任何查询参数,因此如果需要,可以使用同一对象的getQueryParameter或uri full url方法

如果需要更多信息,可以使用context.args。这将为您提供至少在Play 2.2中具有以下键的地图:

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)

您是在寻找对控制器对象的引用,还是仅仅是一个标识符,即哪个控制器的字符串作为操作的基础?两者都可以。我在寻找控制器和方法,字符串和对象都可以。那么在授权类中是否会有一个大的if…else结构?您确实应该在控制器或方法级别定义执行该方法所需的角色,并在授权类中检查它。它确实不容易出错。谢谢,它确实容易出错。因此,我为每种访问类型创建了自定义注释,并将其放在每个控制器方法中。谢谢!ROUTE_控制器和ROUTE_ACTION_方法给出了期望的结果。
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)