gpt4 book ai didi

java - 如何在 CXF 客户端中动态添加 HTTP header ?

转载 作者:行者123 更新时间:2023-11-30 08:18:45 26 4
gpt4 key购买 nike

我正在使用 SpringCXF 创建一个 soap 网络服务客户端。

Web 服务需要 HTTP header Authorization=[pass] 进行身份验证。到目前为止,我按如下方式实现了它:

Map<String, Object> context = ((BindingProvider) port).getRequestContext();
Map<String, List<String>> headers = new HashMap<>();
headers.put("Authorization", Arrays.asList("Basic pass")); //fixed value so far
context.put(MessageContext.HTTP_REQUEST_HEADERS, headers);

但现在我必须根据实际执行客户端的用户动态更改基本传递。

问题:当我将 CXF 与 Spring 一起使用时,我的 CXF 客户端由 Spring 管理和共享代理。因此,每当我更改 port 中的 HTTP header 时,它都会影响所有实例!

如何在发送网络服务请求期间动态添加 HTTP 身份验证 header ?

我必须准确地创建一个 http header lik:Authorization=[pass]

最佳答案

我假设您真正想要做的是 HTTP BASIC 身份验证。 CXF 中定义了 API 来为 BASIC 身份验证设置用户名/密码。这将做你想做的:

HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(stub).getConduit();
httpConduit.getAuthorization().setUserName("username");
httpConduit.getAuthorization().setPassword("password");

还有其他选择,比如将用户名/密码直接放入请求上下文中:

AuthorizationPolicy authzPolicy = new AuthorizationPolicy();
authzPolicy.setUserName("username");
authzPolicy.setPassword("password");
((BindingProvider) stub).getRequestContext().put(AuthorizationPolicy.class.getName(), authzPolicy);

关于java - 如何在 CXF 客户端中动态添加 HTTP header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com