是否可以在ClientHeadersFactory中获取出站客户端请求信息?

发布于 2025-01-18 02:27:10 字数 314 浏览 1 评论 0原文

我正在编写带有以下层的应用程序:

外部客户端(例如浏览器) - >我的服务 - >外部api

我有一个clientheadersfactory,它将一些标头添加到我在我的服务中使用的REST客户端来调用外部API。我想知道是否可以在我的服务外部API中从我的REST客户端获得有关客户端请求的信息?例如,我想知道HTTP方法和我的REST客户端正在调用的端点。这将影响我添加的标题。

谢谢!

I am writing an application with the following layers:

External Client (e.g. browser) -> My Service -> External API

I have a ClientHeadersFactory which adds some headers to the REST Client I use in My Service to call External API. I was wondering whether it was possible to get information about the client request from my REST Client in My Service to External API? For example, I'd like to know the HTTP method and the endpoint my REST Client is calling. This will impact what headers I add.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坏尐絯 2025-01-25 02:27:10

ClientHeadersFactory 不适用于需要查看请求的用例。
要根据请求添加标头,您可以使用 ClientRequestFilter

请注意,您可以将 ClientHeadersFactory 与过滤器混合使用。

例如,您可以执行以下操作:

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import java.io.IOException;

public class MyFilter implements ClientRequestFilter {
    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        if ("POST".equalsIgnoreCase(requestContext.getMethod())) {
            requestContext.getHeaders().add("MyHeader", "POST-specific header");
        }
    }
}

您可以通过使用 @RegisterProvider(MyFilter.class) 注释客户端来为单个客户端注册这样的过滤器,或者,如果您使用 quarkus -rest-client-reactive,通过将 @Provider 注释添加到过滤器,适用于应用程序中的所有客户端。

ClientHeadersFactory is not designed for use cases where looking into the request is necessary.
To add headers based on the request, you can use ClientRequestFilter.

Note, that you can mix ClientHeadersFactory with filters.

For example, you could do something like this:

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import java.io.IOException;

public class MyFilter implements ClientRequestFilter {
    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        if ("POST".equalsIgnoreCase(requestContext.getMethod())) {
            requestContext.getHeaders().add("MyHeader", "POST-specific header");
        }
    }
}

You can register such a filter for a single client, by annotating the client with @RegisterProvider(MyFilter.class), or, if you use quarkus-rest-client-reactive, for all the clients in your application by adding the @Provider annotation to the filter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文