我有由vertx http堆栈运行的https服务器。有没有办法为所有已建立的连接获取客户端IP地址(即用于审计,安全性,监视,QoS和其他目的)。理想情况下,我希望有事件(回调)驱动的API通知已建立和已关闭的连接。我怎样才能实现它?
目前的解决方法是轮询类似于netstat的工具,但它非常不方便而且不是真正的实时(即可能错过短连接)。
答案 0 :(得分:1)
Github社区的回答是:https://github.com/vert-x3/vertx-web/issues/685
您可以使用HttpServer连接处理程序并轻松管理它:
server.connectionHandler(conn -> {
// Track conn.remoteAddress()
conn.closeHandler(v -> {
// Cleanup track of conn.remoteAddress()
});
});
答案 1 :(得分:0)
在我的示例中,我将所有IP地址写入控制台。但是,当然您可以将其写入日志文件,数据库或您选择的其他位置。
Vertx vertx = Vertx.vertx();
// This your regular router
Router router = Router.router(vertx);
// We'll have two routes, just for fun
router.route("/a").handler((ctx) -> {
ctx.response().end("A");
});
router.route("/b").handler((ctx) -> {
ctx.response().end("B");
});
Router filterRouter = Router.router(vertx);
filterRouter.get().handler((ctx)->{
System.out.println("IP is " + ctx.request().remoteAddress());
// Forward to your actual router
ctx.next();
});
filterRouter.mountSubRouter("/", router);
vertx.createHttpServer().requestHandler(filterRouter::accept).listen(8080);