【问题标题】:Play framework 2.2: How to get current controller and action in javaPlay framework 2.2:如何在java中获取当前的控制器和动作
【发布时间】:2014-09-03 13:59:37
【问题描述】:

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

为了实现这一点,我已经完成了以下操作

1.编写自定义动作

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

2.用动作注释控制器

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

在我的操作中,我可以访问正在会话中的用户。我想获取当前控制器和操作,以便我可以对用户进行身份验证。有什么办法吗?

我已阅读有关使用参数创建自定义注释并在每个控制器中传递参数以识别操作的信息。但是,如果我在复制粘贴时误写了错误的动作名称,这似乎很容易出错。

谢谢

【问题讨论】:

  • 您是在寻找对控制器对象的引用还是只是作为动作基础的控制器的标识符(即字符串)?
  • 两者都可以。我在找控制器和方法,字符串和对象都可以。
  • 那么你会在你的Authorization 类中有一个大的if...else 结构吗?您确实应该在控制器或方法级别定义执行该方法所需的角色并在您的Authorization 类中检查它。它真的不容易出错。
  • 谢谢它确实容易出错。因此,我为每种访问类型创建了自定义注释,并将其放入每个控制器方法中。

标签: java playframework playframework-2.0 playframework-2.2


【解决方案1】:

您可以使用context.request().path() 获取包含所用路径的字符串。这将不包含任何查询参数,因此如果您需要它们,您可以使用同一对象的 getQueryParameteruri(完整 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)

【讨论】:

  • 谢谢! ROUTE_CONTROLLER 和 ROUTE_ACTION_METHOD 给出了预期的结果。
猜你喜欢
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多