vertx服务器设置每个路由的相互身份验证要求

w1e3prcc  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(471)

我有一个基于vertx(3.9.x)的http服务器,其中需要满足两组请求路径。第一条路径总是需要客户端证书( ClientAuth.REQUIRED )另一个客户端证书是可选的( ClientAuth.REQUEST 或者 ClientAuth.NONE ).
正如我所见,唯一的地方 ClientAuth 可以设置为 HttpServerOptions ,并绑定到特定端口,下面是示例代码段:

final HttpServerOptions options = new HttpServerOptions()
        .setPort(443)
        .setClientAuth(ClientAuth.REQUIRED) // One option per listening port.
        // Set all other server options

路由器配置如下:

final Router router = Router.router(vertx);
router.route("/required-client-cert/").handler(this::handleMutualAuth);
router.route("/no-need-client-cert/").handler(this::handleRegularAuth);

// Any one of the above routes can work anytime, because ClientAuth is configured in server options.

是否可以在单个vertx应用程序中处理此问题?如果是,怎么做?
在单端口监听时,是否有其他选择?
谢谢。

2mbi3lxu

2mbi3lxu1#

经过更多的研究,我得出了这篇文章的建议。简而言之,“我不能根据url的路径改变ssl配置,因为它只有在ssl连接建立之后才可用”。
解决方案是,我可以在开始时为需要客户端证书(mutual auth)的路径设置另一个处理程序,并在那里验证客户端证书,如下所示:

router.route("/required-client-cert/")
          .handler(clientCertHandler::validateClientCert)
          .handler(this::handleMutualAuth);

另一种方法是配置一个不同的端口来监听需要相互身份验证的请求。但是,在我的例子中,配置另一个端口不是一个选项。

相关问题