vert.x有集中过滤吗?

时间:2015-03-18 20:55:20

标签: vert.x

我是Vert.X的新手。

Vert.x是否具有集中过滤器的内置功能?我的意思是你将在J2EE应用程序上使用的那种过滤器。

例如,所有页面都必须通过身份验证过滤器,或类似的东西。

在Vert.x中是否有标准化的方法来实现这一目标?

5 个答案:

答案 0 :(得分:3)

过滤是servlet容器中责任链的实现。 Vert.x没有这种概念,但是使用轭(或新版本中的顶点),您可以轻松地重现此行为。

在路由部分中查看here

HTH,
卡罗

答案 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
        }
    });

这里取决于中间件的路由集将被调用。