Rest 重新模板无法设置常规基本身份验证标头

Rest 重新模板无法设置常规基本身份验证标头,rest,spring-security,resttemplate,Rest,Spring Security,Resttemplate,有一个基本的身份验证端点,我需要使用Resttemplate来执行不同的http方法 但是,使用以下解决方案,它可以工作: public CommonResult createSubscription(final SubscriptionDTO subscriptionDTO) { String authStr = "operator:pass"; String base64Creds = Base64.getEncoder().encodeToString(

有一个基本的身份验证端点,我需要使用Resttemplate来执行不同的http方法

但是,使用以下解决方案,它可以工作

public CommonResult createSubscription(final SubscriptionDTO subscriptionDTO) {
    String authStr = "operator:pass";
    String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes());
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Basic " + base64Creds);
    HttpEntity request = new HttpEntity(subscriptionDTO, headers);

    ResponseEntity<CommonResult> responseEntity = restTemplate.exchange(subscripURL + URL_PATH, HttpMethod.POST, request, CommonResult.class);

    return responseEntity.getBody();
}
public RestTemplate restTemplate(@Value("${custom.timeout}") int timeOut, @Value("custom.restacc") String account, @Value("custom.restpwd") String password) {
    final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
    requestFactory.setConnectTimeout(timeOut);
    requestFactory.setReadTimeout(timeOut);

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setRequestFactory(requestFactory);
    restTemplate.getInterceptors().add(new CustomBasicAuthInterceptor(account, password));

    return restTemplate;
}




public class CustomBasicAuthInterceptor implements ClientHttpRequestInterceptor {

    private final String username;
    private final String password;

    public CustomBasicAuthInterceptor(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

        String authStr = username + ":" + password;
        String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes());

        HttpHeaders headers = request.getHeaders();
        //headers.add("Authorization", "Basic " + base64Creds);
        headers.set("Authorization", "Basic " + base64Creds);
        return execution.execute(request, body);
    }
}