我正在访问一个API,希望该API对他们的Login端点进行POST调用,然后进行后续调用以获取数据。我对其登录端点进行的呼叫有效。但是随后的获取数据调用引发401错误。这是我得到的错误
org.springframework.web.client.HttpClientErrorException:401未经授权 在org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 在org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:615) 在org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:573) 在org.springframework.web.client.RestTemplate.execute(RestTemplate.java:544) 在org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:465) 在com.wsc.eventconsumer.phonex.api.InventoryServiceImpl.getProducts(InventoryServiceImpl.java:70)
现在,当我使用Postman和Restlet客户端时,此方法工作正常。我注意到,在Restlet客户端中,对API的GET调用传递了一个由API在登录调用中设置的cookie。我尝试从GET请求中的登录调用传递响应标头。但是我仍然得到401。我正在使用标准的resttemplate配置。
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
HttpEntity<Credentials> entity = new HttpEntity<Credentials>(credentials, headers);
ResponseEntity<String> response = restTemplate.exchange(loginEndpoint, HttpMethod.POST, entity, String.class);
HttpHeaders rHeaders = response.getHeaders();
HttpEntity<String> request = new HttpEntity<String>(rHeaders);
ResponseEntity<Product[]> response2 = restTemplate.exchange(productEndpoint,
HttpMethod.GET, request, Product[].class);