gpt4 book ai didi

java - 一次完成基本身份验证

转载 作者:行者123 更新时间:2023-12-02 03:11:49 25 4
gpt4 key购买 nike

我开发了一个 spring-boot 应用程序。当我需要执行 REST 请求(POST、PUT...)时,我每次都会使用类似的基本身份验证

HttpEntity<PostJql> httpEntity = new HttpEntity<PostJql>(post, jiraUtils.getHeader());
ResponseEntity<IssueDataWrapper> response = restTemplate.exchange(urlJiraResponse, HttpMethod.POST, httpEntity, IssueDataWrapper.class);

是否有另一种方法可以在应用程序中进行一次基本身份验证,然后在没有基本身份验证的情况下使用 RestTemplate 或 httpPost {Put/Delete...} ?

致以诚挚的问候

最佳答案

是的。使用满足您需要的 ClientHttpRequestFactory 配置您的 RestTemplate

您可以在构造函数中设置它:

  restTemplate = new RestTemplate(requestFactory);

...或者你可以将所有这些东西制作成bean并让Spring连接它。

您可以扩展SimpleClientHttpRequestFactory,覆盖createRequest():

 public class BasicAuthSimpleClientHttpRequestFactory 
extends SimpleClientHttpRequestFactory {

@Override
public HttpClientRequest createRequest(URI uri, HttpMethod httpMethod) {
HttpClientRequest request = super.createRequest(uri, httpMethod);
HttpHeaders headers = request.getHeaders();
headers.add(... your auth header ...);
return request;
}
}

...或者您可以引入 Apache HttpComponents 作为依赖项并使用 HttpComponentsClientHttpRequestFactory,并配置底层 Apache HttpClient 来执行您需要的身份验证。 Apache documents this in detail ,但为了让您开始:

    BasicCredentialsProvider credentialsProvider = 
new BasicCredentialsProvider();

credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "password"));

HttpClient client = HttpClientBuilder.create()
.setDefaultCredentialsProvider(credentialsProvider)
.build();

RestTemplate restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory(client));

根据我的经验,如果可以的话,引入 Apache HttpComponents 是值得的——它比 RestTemplate 默认使用的基于 HttpUrlConnection 的 HTTP 客户端更可靠且可配置。当您的需求扩展到其他身份验证方法、超时、重试策略等时,您会很高兴有一个 HttpClient 可供配置。

关于java - 一次完成基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915786/

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