RestTemplate身份验证,同时设置用户名和密码

RestTemplate身份验证,同时设置用户名和密码

问题描述:

我有一个curl命令,但我想通过此用户名和密码的信息,同时调用其余的API,我尝试过的每件事情都无法正常工作。RestTemplate身份验证,同时设置用户名和密码

curl -u E-BOARD:HVRid992Xl740NnWOkjk -X GET --header 'Accept: application/json' 'https://XXXXXX.fr/AAAAAA/BBBBB/v1/details?abc=hsdfh&zyx=asdfsdf 

我休息API看起来像这样

String url = new StringBuilder(urlConfigService.getProfiles().getBaseUrl()).append(relativeUrl).toString(); 
    **String hiddenAccess = "ASHGHGHJ:HVRid992Xl740NnWOkjk";** 

    // @formatter:off 
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) 
      .queryParam("refEboard", refEboard) 
      .queryParam("idLangue", "FR"); 
    // @formatter:on 

    HttpHeaders requestHeaders = new HttpHeaders(); 
    requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
    requestHeaders.add("Authorization", hiddenAccess); 
    HttpEntity<?> httpEntity = new HttpEntity<String>(requestHeaders); 
    restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); 
    String result = 
     restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, httpEntity, String.class).getBody(); 
    return (T) new Gson().fromJson(result, type.getClass()); 

在我看来,你要发送的基本身份验证凭据。要做到这一点,你必须编码为Base64用户名和密码,并设置请求头是这样的:

基本信息(用户名:密码Base64编码)

这是你如何做到这一点:

RestTemplate restTemplate = new RestTemplate(); 
HttpHeaders header = new HttpHeaders(); 
String auth = username + ":" + password; 
byte [] authentication = auth.getBytes(); 
byte[] base64Authentication = Base64Utils.encode(authentication); 
String baseCredential = new String(base64Authentication); 
header.add(HttpHeaders.AUTHORIZATION, "Basic " + baseCredential); 
      header.setAccept(Collections.singletonList(MediaType.TEXT_PLAIN)); 

HttpEntity<String> request = new HttpEntity<String>(header); 
restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, request, String.class);