Java 撤销令牌。REST模板使用问题
我正在尝试撤销以下google令牌(Java 撤销令牌。REST模板使用问题,java,spring,rest,google-api-client,spring-rest,Java,Spring,Rest,Google Api Client,Spring Rest,我正在尝试撤销以下google令牌(“内容类型:application/x-www-form-urlencoded”,请求类型POST,https://accounts.google.com/o/oauth2/revoke?token={token}) 我的代码示例是: private static final String REVOKE_URL = "https://accounts.google.com/o/oauth2/revoke"; private static final Strin
“内容类型:application/x-www-form-urlencoded”
,请求类型POST
,https://accounts.google.com/o/oauth2/revoke?token={token}
)
我的代码示例是:
private static final String REVOKE_URL = "https://accounts.google.com/o/oauth2/revoke";
private static final String TOKEN = "token";
@Autowired
private RestTemplate restTemplate;
public void revokeToken(TokenDetailsDto tokenDetailsDto) {
HttpHeaders headers = new HttpHeaders();
headers.add(CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> entity = new HttpEntity(headers);
Map<String, String> parameters = new HashMap<>();
parameters.put(TOKEN, tokenDetailsDto.getRefreshToken());
LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity, uriParameters);
restTemplate.exchange(REVOKE_URL, HttpMethod.GET, entity, Void.class, parameters);
}
所以问题在于restTemplate使用(我的spring部件)。有什么想法吗?我做错了什么?解决方案是:
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> entity = new HttpEntity(headers);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(REVOKE_URL)
.queryParam("token", tokenDetailsDto.getRefreshToken());
LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity);
restTemplate.postForObject(builder.build().encode().toUri(), entity, Void.class);
HttpHeaders=newhttpheaders();
headers.add(HttpHeaders.CONTENT\u TYPE、MediaType.APPLICATION\u FORM\u URLENCODED\u VALUE);
HttpEntity=新的HttpEntity(标题);
UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(撤销URL)
.queryParam(“token”,tokenDetailsDto.getRefreshToken());
info(“使用的参数:\n\turl={},\n\tentity={},\n\turiParameters={}”,REVOKE\u URL,entity);
restemplate.postForObject(builder.build().encode().tori(),entity,Void.class);
小说明:服务预期urlParameters,但参数
不是urlParameters,而是它的请求参数。因此,我使用UriComponentsBuilder
构建正确的请求
restTemplate.postForEntity(REVOKE_URL, entity, Void.class, uriParameters);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<?> entity = new HttpEntity(headers);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(REVOKE_URL)
.queryParam("token", tokenDetailsDto.getRefreshToken());
LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity);
restTemplate.postForObject(builder.build().encode().toUri(), entity, Void.class);