【问题标题】:GET Method with JSON body and Bearer Authorization with RestTemplate带有 JSON 正文的 GET 方法和带有 RestTemplate 的承载授权
【发布时间】:2019-09-03 15:45:48
【问题描述】:

我知道....这不是最佳做法,但有人要求我这样做:

我正在尝试获取一个端点,该端点接收带有 3 个参数 (int, int, int)json 正文并具有承载身份验证。

标题

header.setContentType(MediaType.APPLICATION_JSON);
header.set("authorization", bearerToken);

实体

HttpEntity<String> entity = new HttpEntity<>(requestjson.toString(), header);

休息模板

ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

System.out.print(entity):

<{"1stParam":1,"2ndParam":4881,"3rdParam":0},{Content-Type=[application/json], authorization=[Bearer bearerToken]}>

除了安全性和所有此类问题之外,该请求还通过RestTemplate 显示400 HTTP response邮递员工作正常

我也试过HttpURLConnection,但遇到了同样的问题。

感谢您的帮助:)

【问题讨论】:

  • 可以使用具体方法:header.setBearerAuth(bearerToken);

标签: json spring-boot get resttemplate


【解决方案1】:

我刚刚编写了一个类似的解决方案,所以我很确定我知道这是什么。您必须在 Authorization 标头中包含 Bearer。我认为此代码更改将解决您的问题:

header.set("Authorization", "Bearer " + bearerToken);

我将标题键大写。我不认为这很重要,但我知道大写的版本对我有用。我的代码看起来像这样,并且可以正常工作。

这里的基本思想是Authorization 标头必须始终以正在执行的授权类型开头,以便服务器可以知道您要使用的类型。这是一个 400 错误而不是 404 是有道理的,因为标头在技术上是错误的。

【讨论】:

  • 如果你这么说。如果已经完成,则无法从 OP 提供的内容中得知。由于他没有在他的原始代码中编码他的令牌,我认为它可能已经被编码了。我只是指出需要在令牌之前添加“Bearer”和一个空格。这 7 个字符不得编码。
  • 是的,不记名令牌已编码,我也将“不记名令牌代码”放在标题上,就像我的实体一样,但仍然得到 400 个代码
  • 该死。我以为就是这样,因为几天前我得到了类似的东西。那好吧。这里没有新鲜的想法。
  • 谢谢。我认为真正的问题是无法处理 GETrequest 上的 de JSON 正文的 apache 库,因此甚至不发送它。我会继续寻找。
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 2017-12-03
  • 2019-01-26
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多