当前位置: 首页 > 知识库问答 >
问题:

如何使用RestTemplate在(身份验证web服务的)响应体中获取返回的令牌?

勾岳
2023-03-14

我使用RestTemplate调用authenticate web服务并发布用户名和密码,作为回报,我需要从响应体获取令牌,但我找不到一个明确的方法。。这是我的密码

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type","application/json");
requestHeaders.add("Accept", "application/json");
requestHeaders.add("Authorization", auth_token);
final String url = "http://192.168.1.3:18080/api/authenticate";
RestTemplate restTemplate=new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("password",password);
map.add("username",username);
HttpEntity<MultiValueMap<String, String>> entity= new HttpEntity<MultiValueMap<String, String>>(map, requestHeaders);
String response = restTemplate.postForObject(url,entity,String.class);
return response;

这是我需要从中获取令牌的响应主体:Web服务响应主体

共有1个答案

笪成周
2023-03-14

您几乎就在那里,目前您的代码将整个JSON响应作为字符串获取:

return restTemplate.postForObject(url,entity,String.class); 
// {"id_token": "blahblahblah"}

相反,您可以转换为Map并获取正确的值:

Map<String, Object> response3 = restTemplate.postForObject(url, entity, Map.class);
return response3.get("id_token") 
// blahblahblah

或创建一个类:

public class AuthResponse {

    @JsonProperty( "id_token" )
    private String idToken;

    public String getIdToken() {
        return idToken;
    }

    public void setIdToken(String idToken) {
        this.idToken = idToken;
    }
}

并将其转化为:

AuthResponse response4 = restTemplate.postForObject(url, entity, AuthResponse.class);
return response4.getIdToken();
// blahblahblah
 类似资料:
  • 我想使用boto3获取访问AWS服务的临时凭据。用例是这样的:我的Cognito用户池中的一个用户登录到我的服务器,我希望服务器代码为该用户提供访问其他AWS服务的临时凭据。 我有一个Cognito用户池,其中存储了我的用户。我有一个Cognito标识池,它不允许未经授权的访问,只允许来自Cognito用户池的用户访问。 下面是我开始的代码: 但是,仅运行这三行代码就会引发异常: 由于我的Cogn

  • 问题内容: 在使用Java EE 6的Web应用程序上,我想将某些功能作为Json Rest Service公开。我想使用身份验证令牌进行登录,用户将发送其用户名,密码,服务器将发送回令牌,该令牌将用于授权用户在给定时间内的进一步请求。 到目前为止,有几个问题困扰着我; 当服务器创建令牌并将其发送给客户端时,服务器是否应该使用像哈希表这样的东西作为用户ID令牌对将其保存在DB或Bean中? 我可以

  • 我询问了如何建立一个服务呼叫,并在HttpClient上获得了一个很好的信息。然而,虽然这个问题在技术上得到了回答,但我还是被卡住了。 在控制台中,我可以看到我的浏览器向服务发送了什么请求来获取授权令牌。然而,当我尝试在我的服务层中模拟构建请求的调用时,我得到以下错误消息。我在这里犯错的可能性很大。不知道该用谷歌搜索什么,真的。。。 "StatusCode: 500, ReasonPhrase:'

  • 我正在使用C#实现一个REST web服务,它将作为云服务托管在Azure上。因为它是一个REST服务,所以它是无状态的,因此没有cookie或会话状态。 Web服务只能通过HTTPS(由StartSSL. com提供的证书)访问。 用户成功登录服务后,他们将获得一个安全令牌。该令牌将在未来的通信中提供身份验证。 令牌将包含客户端的时间戳、用户ID和ip地址。 所有通信都只能通过HTTPS进行,所

  • 我试图使用网络应用编程接口从Spotify获得令牌: 我的原始请求: 在这里,[authkey]被所需的字符串替换(这被破坏了,给了我一个不同的错误,但现在我修复了它),[code]被Spotify早一步返回的代码替换。 我得到以下回应: 我一定做错了什么,但我想不通。有人能帮我吗?

  • 问题内容: 我有2个Spring Web应用程序,它们提供2套独立的服务。Web App 1具有使用基于用户的身份验证实现的Spring Security。 现在,Web App 2需要访问Web App 1的服务。通常,我们将使用RestTemplate类向其他Web服务发出请求。 我们如何将Web App 2的请求中的身份验证凭据传递给Web App 1 问题答案: 我当时处在同样的情况。这是