当前位置: 首页 > 面试题库 >

使用Android的Spring RestTemplate进行经过身份验证的POST请求

帅锦
2023-03-14
问题内容

我有一个RESTful
API,我正尝试通过Android和RestTemplate与之连接。通过设置HttpEntity的标头,然后使用RestTemplate的exchange()方法,对HTTP的所有请求均通过HTTP身份验证进行身份验证。

所有GET请求都可以通过这种方式很好地工作,但是我无法弄清楚如何完成经过身份验证的POST请求。postForObjectpostForEntity处理POST,但没有简单的方法来设置Authentication标头。

因此,对于GET来说,效果很好:

HttpAuthentication httpAuthentication = new HttpBasicAuthentication("username", "password");
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAuthorization(httpAuthentication);

HttpEntity<?> httpEntity = new HttpEntity<Object>(requestHeaders);

MyModel[] models = restTemplate.exchange("/api/url", HttpMethod.GET, httpEntity, MyModel[].class);

但是POST显然不起作用,exchange()因为它从不发送自定义标头,并且我看不到如何使用来设置请求正文exchange()

从RestTemplate发出经过身份验证的POST请求的最简单方法是什么?


问题答案:

确定找到了答案。exchange()是最好的方法。奇怪的是,HttpEntity该类没有setBody()方法(它具有getBody()),但是仍然可以通过构造函数设置请求主体。

// Create the request body as a MultiValueMap
MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();

body.add("field", "value");

// Note the body object as first parameter!
HttpEntity<?> httpEntity = new HttpEntity<Object>(body, requestHeaders);

MyModel model = restTemplate.exchange("/api/url", HttpMethod.POST, httpEntity, MyModel.class);


 类似资料:
  • 我有一个RESTful API,我试图通过Android和RESTTemplate连接。通过设置HttpEntity的头,然后使用RestTemplate的方法,对所有对API的请求进行HTTP身份验证。 所有的GET请求都可以通过这种方式工作,但是我不知道如何完成经过身份验证的POST请求。和处理帖子,但是没有简单的方法来设置身份验证头。 因此,对于GETs,这非常有效: 但是post显然不能与

  • 我是全新的RestTemboard和基本上在REST API也。我想通过Jira REST API检索我的应用程序中的一些数据,但取回401未经授权。在jira rest api留档上找到并发表文章,但不知道如何将其重写为java,因为示例使用curl的命令行方式。我将感谢任何建议或建议如何重写: 进入java使用SpringRest模板。其中ZnJlZDpmcmVk是用户名:密码的Bas64编码

  • 经过身份验证的请求可用于获取授权代码令牌,以访问系统中的所有者资源。 对授权端点发出的请求会导致用户身份验证,并在向授权端点发送请求时提供明确的凭据。 经过身份验证的请求包含以下参数 - response_type - 这是一个必需参数,用于将值设置为'code',用于请求授权代码。 如果授权请求中没有'response_ type'参数,则授权服务器返回错误响应。 由于无效或不匹配的重定向URI

  • 我有一个react应用程序在一个单独的端口(localhost:3000)上运行,我想用它来验证用户,目前我的Spring后端(localhost:8080)有一个代理设置。 我能以某种方式手动验证而不是通过发送一个请求到我的后端,并获得一个会话cookie,然后在每个请求中包含cookie吗?这也将简化iOS方面的验证过程(使用此过程,我只能将会话cookie值存储在keychain中,并在每次

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。