播放2.2.1 Java:相当于播放1.X的@beforefilter?

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

每个控制器方法之前应用此方法,以便视图可以访问用户的隐式访问权限。

使用Play1,我创建一个BaseController所有请求(@Before filter) 之前 调用此方法并从此扩展所有其他控制器。

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

似乎Scala有些东西,但对Java来说呢? http://www.playframework.com/documentation/2.2.x/ScalaHttpFilters

干杯

虽然你可以在“传统的”webapp框架方式中使用filter( 或拦截器 ),但Play首选方式似乎绝对是组成自定义Action方法; 请参阅有关Action Composition的文档。

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

 public class UserContextInjectingAction extends play.mvc.Action.Simple { public F.Promise call(Http.Context ctx) throws Throwable { Logger.info("Injecting user data into context " + ctx); injectUser(ctx); // Written by you return delegate.call(ctx); } } 

而你最终得到的控制器代码如下所示:

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