java - Play 2.2.1 Java : Whats the equivalent of @before filters from play 1. X?

标签 java scala playframework playframework-2.0

我想实现一个 setUserIfPresent() 方法,将用户对象放入上下文中,例如 Http.Context.current()。 args.put("用户", 用户);

此方法应在每个 Controller 方法之前应用,以便 View 可以隐式访问用户。

在 Play1 中,我创建了一个BaseController,它调用此方法之前所有请求(@Before 过滤器)和从这个 Controller 扩展所有其他 Controller 。

如何使用 Java API 在 play2 中实现这样的功能?

似乎有一些东西适用于 Scala 而不是适用于 Java? http://www.playframework.com/documentation/2.2.x/ScalaHttpFilters

干杯

最佳答案

虽然您可以以“传统”webapp 框架方式使用过滤器(or Interceptors),但 Play 首选方式似乎肯定是编写自定义 Action 方法;请参阅 Action Composition 上的文档.

如果您遵循他们的风格,您将定义一个新的 Action 实现,如下所示:

public class UserContextInjectingAction extends play.mvc.Action.Simple {

    public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
        Logger.info("Injecting user data into context " + ctx);
        injectUser(ctx); // Written by you
        return delegate.call(ctx);
    }

}

你最终会得到如下所示的 Controller 代码:

@With(UserContextInjectingAction.class)
public static Result showHomePage() {
    return ok("Welcome");
}   

关于java - Play 2.2.1 Java : Whats the equivalent of @before filters from play 1. X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072380/

相关文章:

java - 错误: method setCurrentItemInternal in class

java - 我无法使用 Selenium WebBrowser Java 打开任何内容

scala - free monad 应该基于的仿函数在哪里

scala - 如何使用play的表单验证来检查密码是否匹配

java - 如果函数多次附加加载消息

java - 使用 JDBC 运行查询

scala - 使用Spark访问数据框中的列

scala - 这两个对采用结构类型集合的函数的调用有什么区别?

playframework - Play vs. Lift 痛点

java - 参数未知(Play! Framework)