RestTemplate 发送 Authorization Basic 认证

RestTemplate 是一个非常强大的 http 请求调用工具,根据它的名字就知道,它非常的适合调用 Rest 请求的场景。

在做 OAuth2 或者第三方认证的程序员中,我们往往需要进行 Basic 基本认证。这个涉及到 HttpHeaders 设置和 Basic 加密。

如果使用的不对,可能会报:org.springframework.web.client.HttpClientErrorException: 401 null 异常。我这里提供两种 HTTP Basic Authentication 基本认证用法。

第一种,使用 BasicAuthorizationInterceptor 拦截器。

restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor(username, password));
restTemplate.getForObject(url, String.class);

第二种,手动设置 HttpHeaders,并对用户名和密码进行 Base64 处理。

String auth_Str = username + ":" + password;
byte[] encodedAuth = Base64.encodeBase64(auth_Str.getBytes(Charset.forName("US-ASCII")));
String authHeader = "Basic " + new String(encodedAuth);
HttpHeaders headers = new HttpHeaders();
headers.set("authorization", authHeader);
restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers),String.class).getBody();

注意上面的一个编码格式,US-ASCII。也可以不需要,具体看你的架构场景!

String user = "www.xttblog.com";
String password = "taoge";
String userMsg = user + ":" + password;
String base64UserMsg = Base64.getEncoder().encodeToString(userMsg.getBytes());
System.out.println("base64UserMsg:" + base64UserMsg);

String url = "http://url:port/api";
String postBody = "hello world";

HttpHeaders headers = new HttpHeaders();
headers.add("User-Agent", "www.xttblog.com");
headers.add("Authorization ", base64UserMsg);
HttpEntity<String> entity = new HttpEntity<>(postBody, headers);

ResponseEntity<JSONObject> response = restTemplate.postForEntity(url, entity, JSONObject.class);

System.out.println(response.getBody().toJSONString());

参考资料

  • How to set an “Accept:” header on Spring RestTemplate request?
  • HTTP 基本认证
  • HTTP Basic Authentication 基本认证

RestTemplate 发送 Authorization Basic 认证

: » RestTemplate 发送 Authorization Basic 认证

原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/tech/java/252186.html

(0)
上一篇 2022年5月4日 04:52
下一篇 2022年5月4日 04:57

相关推荐

发表回复

登录后才能评论