使用@before时,仅在一个类中使用。如何在游戏框架中应用全局过滤器?因此,所有控制器类都使用一个过滤器。如何在游戏框架中应用全局过滤器
回答
一个简单的解决方案是扩展所有控制器的基础控制器,并在基础控制器中拥有@Before。
其他选项(以及更好的解决方案,因为它更灵活)是使用@With注释。播放文档中的示例是
实施例:
public class Secure extends Controller {
@Before
static void checkAuthenticated() {
if(!session.containsKey("user")) {
unAuthorized();
}
}
}
并在另一个控制器:
@With(Secure.class)
public class Admin extends Application {
...
}
这意味着管理控制器将处理所有的拦截(@Before,@After,@最后)包含在安全控制器中。
不幸的是,这仍然要求您将`@ With`注释添加到所有控制器。特别是在安全插件的情况下,最好能够使所有控制器默认安全,然后将那些应该可公开访问的白名单列入白名单。但我还没有想出如何做到这一点。 – 2011-01-08 19:31:37
表示同意,我不喜欢这里的解决方案,因为每个开发人员都必须记住,并且人类行为表示它会在某个时候被遗忘。 – 2012-02-17 03:05:18
您可以简单地在这个问题上使用PlayPlugin。有关更多详细信息,请参见here。
我做了这事通过在GlobalSettings全局类处理传入的请求:
此描述类: http://www.playframework.org/documentation/2.0/JavaGlobal
这说明你想要覆盖的方法。 http://www.playframework.org/documentation/2.0/JavaInterceptors
这里是我如何使用它在我自己的项目的例子(当然,这是你在找什么的简化版本):
@Override
public play.mvc.Action onRequest(play.mvc.Http.Request request, java.lang.reflect.Method method) {
if (request.path().startsWith("/secret/locked")) {
return new Action.Simple() {
@Override
public Result call(play.mvc.Http.Context ctx) throws Throwable {
return redirect(routes.Application.forbidden());
}
};
}
return super.onRequest(request, method);
}
这不是一个很好的解决方案来扩展一个用于所有控制器的基础控制器,并在基础控制器中拥有@Before。
您可以扩展过滤器或essensialfilter .e.g。
级过滤器1扩展器{}
和应用过滤器1至全球
- 1. 如何在实体框架上应用全局过滤器?
- 2. 如何添加过滤器的WebSocket请求在游戏框架
- 3. 如何使用Promise.timeout在游戏框架过滤
- 4. 如何与游戏框架
- 5. 在游戏框架
- 6. 安全JPA在游戏框架结合
- 7. Android 2D游戏:我应该使用框架布局还是游戏引擎?
- 8. 在播放框架2.x中,如何添加全局动作/过滤器?
- 9. 应用全局过滤实体框架模型
- 10. 游戏框架:用假的应用
- 11. 如何在laravel 4框架中应用xss过滤器?
- 12. 如何使用testacular与游戏框架
- 13. 如何绑定在游戏框架2.0
- 14. 行动如何在游戏框架
- 15. 如何执行在游戏框架
- 16. 如何显示在游戏框架2.1
- 17. 如何解决在游戏框架2
- 18. 强制退出游戏框架应用
- 19. 的Java游戏框架UnexpectedException应用PropertiesEnhancer
- 20. 游戏框架:由
- 21. 与游戏框架
- 22. JpaQueryException - 游戏框架
- 23. Android游戏框架
- 24. SQL在玩游戏!框架
- 25. 路线在游戏框架
- 26. 加入在游戏框架
- 27. 在Ebean游戏框架2.0
- 28. 如何在过滤器数据表中使用全局过滤器
- 29. 哪个游戏框架易于在android中开发2D游戏应用?
- 30. 如何在游戏引擎中使用全局lua_State *?
这关系到我的问题http://stackoverflow.com/questions/4597766/easy-way-to-use-secure-模块或类似于所有控制器的游戏。我试图使用字节码增强器为所有控制器添加一个“@ With”注释,但是这引起了我的这个问题:http://stackoverflow.com/questions/4608883/problem-with-classes-not-found-during -playplugin-enhance – 2011-01-08 19:27:35
http://www.playframework.com/documentation/2.1.0/ScalaInterceptors – ThePizzle 2013-03-06 18:06:30