使用@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. 安全JPA在遊戲框架結合
- 6. Android 2D遊戲:我應該使用框架佈局還是遊戲引擎?
- 7. 遊戲框架:用假的應用
- 8. 如何解決在遊戲框架2
- 9. 如何綁定在遊戲框架2.0
- 10. 強制退出遊戲框架應用
- 11. 遊戲框架:由
- 12. Android遊戲框架
- 13. 加入在遊戲框架
- 14. SQL在玩遊戲!框架
- 15. 在Ebean遊戲框架2.0
- 16. 遊戲框架:顯示通過HTML
- 17. 遊戲框架:如何通過在onRequest函數
- 18. 遊戲框架:如何從Json的
- 19. 如何安裝遊戲!框架模塊?
- 20. 在遊戲框架應用程序中使用Vue.js
- 21. 在EntityFramework中添加全局過濾器
- 22. 如何在遊戲框架中使用會話範圍?
- 23. 如何在遊戲框架中使用Group By?
- 24. 實體框架與遊戲服務器
- 25. JavaScript框架的遊戲UI
- 26. Android遊戲框架概念
- 27. 安裝遊戲框架
- 28. 2D遊戲開發框架?
- 29. gui的Java遊戲框架
- 30. 如何在Play框架過濾器中使用ReactiveMongo?
這關係到我的問題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