【问题标题】:Unauthorized 401 error for GET call on stockitem对 stockitem 进行 GET 调用的未经授权的 401 错误
【发布时间】:2019-02-12 23:16:17
【问题描述】:

我正在使用 Java Spring Resttemplate 访问 Acumatica API。对登录端点的 POST 调用工作正常。但是下一个获取 StockItems 的调用会得到 401 Unauthorized error

org.springframework.web.client.HttpClientErrorException: 401 Unauthorized at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:615) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:573) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:544) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:465) at 

现在,当我使用 Postman 和 Chrome Restlet 客户端时,这可以正常工作。我注意到在 Restlet 客户端中,对 API 的 GET 调用传递了由 API 在登录调用中设置的会话 cookie。我尝试在 GET 请求中传递来自登录调用的响应标头。但我仍然得到 401。我使用的是标准的 resttemplate 配置。

HttpEntity<Credentials> entity = new HttpEntity<Credentials>(credentials, headers);
ResponseEntity<String> response = restTemplate.exchange("https://xxxx.acumatica.com/entity/auth/login", 
HttpMethod.POST, entity, String.class);

HttpHeaders rHeaders = response.getHeaders();
String set_cookie = rHeaders.getFirst(rHeaders.SET_COOKIE);

if (LOG.isInfoEnabled()) { LOG.info("Response: " + response.toString()); }
if (LOG.isInfoEnabled()) { LOG.info("Set-Cookie: " + set_cookie); }


HttpEntity<String> entity2 = new HttpEntity<String>(response.getHeaders());
ResponseEntity<String> response2 = restTemplate.exchange("https://usell.acumatica.com/entity/Default/6.00.001/StockItem?$expand=Attributes,WarehouseDetails", HttpMethod.GET, entity2, String.class);

使用 Java 的 Acumatica API 客户端是如何解决这个问题的?

【问题讨论】:

  • 您似乎没有将所有需要的凭据/标头/令牌传递给 acumastica。尝试检查您的 java 调用与有效的调用
  • 你是对的.. 我所要做的就是用所有的 cookie 创建我的请求标头

标签: spring acumatica resttemplate


【解决方案1】:

我没有设置所有的 cookie.. 这就是我必须做的所有事情

List<String> cookies = response.getHeaders().get(HttpHeaders.SET_COOKIE);
HttpHeaders requestHeaders = new HttpHeaders();
for (String cookie : cookies) {
requestHeaders.add("Cookie", cookie);
}

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多