我是Vert.X的新手。
Vert.x是否具有集中过滤器的内置功能?我的意思是你将在J2EE应用程序上使用的那种过滤器。
例如,所有页面都必须通过身份验证过滤器,或类似的东西。
在Vert.x中是否有标准化的方法来实现这一目标?
答案 0 :(得分:3)
答案 1 :(得分:3)
我知道这个问题已经过时了,但对于那些仍在Vertx 3中寻找过滤器的人来说,解决方法是使用subRouter:
// Your regular routes
router.route("/").handler((ctx) -> {
ctx.response().end("...");
});
// Have more routes here...
Router filterRouter = Router.router(vertx);
filterRouter.get().handler((ctx)->{
// Do something smart
// Forward to your actual router
ctx.next();
});
filterRouter.mountSubRouter("/", router);
答案 2 :(得分:1)
Vert.x对于应该处理多少事情没有任何意见。但一般来说,这些类型的功能通常实现为"总线模块" (即在Vert.x中接收输入并通过事件总线产生输出的模块/ Verticle)2。事实上,auth管理器模块可以帮助您更好地理解如何完成此操作: https://github.com/vert-x/mod-auth-mgr
在Vert.x 3中,模块系统将会消失,但模式将保持不变。构建在Vert.x上的某些更高级别框架可能支持这些类型的过滤器,但Vert.x核心不支持。
如果您要开始在Vert.x上构建Web应用程序,还建议您在Vert.x Apex中浏览: https://github.com/vert-x3/vertx-apex
答案 3 :(得分:1)
从我的POV来看,这与vert.x试图实现的完全相反。作为框架核心构建块的verticle
应该保持功能的分布,而不是集中。
对于有意义的多线程(集群)异步环境,因为只要你开始介绍某些东西"集中式" (通常是同步的),你将失去异步能力。
其中一个选项是在你的情况下实现auth将通过事件总线与相应的auth-verticle交换消息。在这种情况下,您必须处理此类请求的异步方面。
答案 4 :(得分:0)
Vert.x与node.js比任何其他基于java的框架更相似。 Vert.x依赖于中间件。您可以定义它们并将它们附加到路径。根据他们定义的顺序,他们将被调用。
例如,假设您有一个用户应用程序,您希望在调用控制器之前运行日志记录并请求验证。 您可以执行以下操作:
Router router = Router.router(vertx);
router.route("/*").handler(BodyHandler.create()); // Allows Body to available in post calls
router.route().handler(new Handler<RoutingContext>() {
@Override
public void handle(RoutingContext event) {
//Handle logs
}
})
router.route("/user").handler(new Handler<RoutingContext>() {
@Override
public void handle(RoutingContext event) {
// handle verification for all apis starting with /user
}
});
这里取决于中间件的路由集将被调用。