我在Spring Boot上有一个项目,我需要通过Twitter实施授权。
还有什么更简单的? -我问自己,然后呆了几天。
问题是我尝试过的大多数库(侦听/ connect / twitter或/ signin / twitter)都返回相同的响应
Invalid cookie header: "set-cookie: personalization_id=""; Expires=Tue, 28 Jul 2020 20:04:39 GMT; Path=/; Domain=.twitter.com". Invalid 'expires' attribute: Tue, 28 Jul 2020 20:04:39 GMT
这句话吸引了我的注意力:
Invalid 'expires' attribute
这可以通过配置RestTemplate来解决,但是问题在于它是在配置中深层创建的,并由private final字段隐藏。 我认为应该有一个比使用反射API更好的决定,我只是看不到
也许有人可以通过Twitter建议正确的授权方式。
经过测试的版本:
P.S。 Facebook与spring-security-oauth2-jose和spring-security-oauth2-client完美配合,但是未将twitter配置为提供程序
必须为客户端注册“ twitter”指定提供商ID
答案 0 :(得分:0)
这听起来像您需要配置RestTemplate
才能使用标准cookie规范。这可以通过在RequestConfig.Builder
上设置cookieSpec,然后通过HttpComponentsClientHttpRequestFactory
来最终创建RestTemplate
来实现。
像这样的东西:
@Bean
public RestTemplate restTemplate() {
RequestConfig requestConfig = RequestConfig.custom()
.setCookieSpec(CookieSpecs.STANDARD)
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.mergeRequestConfig(requestConfig);
return new RestTemplate(factory);
}
对不起,目前我没有可用的IDE / javac,因此可能无法编译。
答案 1 :(得分:0)
使用此配置您的RestTemplate Bean以使用标准Cookie规范
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(getClientHttpRequestFactory());
}
private HttpComponentsClientHttpRequestFactory getClientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
clientHttpRequestFactory.setHttpClient(getHttpClient());
return clientHttpRequestFactory;
}
private HttpClient getHttpClient() {
return HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.custom()
.setCookieSpec(CookieSpecs.STANDARD).build())
.build();
}