【问题标题】:Basic authendication for Rest API using RestTemplate使用 RestTemplate 对 Rest API 进行基本身份验证
【发布时间】:2014-01-15 07:28:56
【问题描述】:
我在 java 中使用 spring mvc(基于注释)。我需要在我的应用程序中做休息 API。我对 API 和 REST 都很陌生。我的 Rest 应用程序中需要做的所有基本配置是什么?我打算使用“RestTemplate”
如何使用 RestTemplate 进行基本身份验证(在 URL 标头中传递用户名和密码)?请任何人帮助我。
提前致谢。
【问题讨论】:
标签:
java
api
spring-mvc
resttemplate
【解决方案1】:
您必须添加身份验证标头(例如,Base64 来自org.apache.commons.codec.binary.Base64):
String plainCreds = "yourUsername@yourPassword";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
然后将其添加到请求中:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<YourResponseType> response = restTemplate.exchange(url, HttpMethod.GET, request, YourResponseType.class);
YourResponseType account = response.getBody();
对于 POST 请求,您可以将 HttpEntity 传递给标准 postForObject() 方法
【解决方案2】:
你必须用“:”代替“@”
String plainCreds = "yourUsername:yourPassword";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
HttpEntity<String> httpEntity = new HttpEntity<String>(headers);
ResponseEntity<YourResponseType> response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, YourResponseType.class);
YourResponseType account = response.getBody();