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);