OAuth2 Java - 如何设置接受 header
OAuth2 Java - How to set Accept header
我正在尝试使用混合解决方案为我的网站实施 "sign in with Github" 功能 - 该网站的 javascript 执行初始 login/credentials 和重定向 url用于 tomcat servlet 继续访问令牌请求。
我正在使用 Google API oauth2 库用于 Java。
我的代码目前是这样的:
AuthorizationCodeTokenRequest tokenRequest =
new AuthorizationCodeTokenRequest(
new NetHttpTransport(),
new JacksonFactory(),
new GenericUrl("https://github.com/login/oauth/access_token"),
code)
.setClientAuthentication(
new ClientParametersAuthentication(
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET));
TokenResponse tokenResponse = tokenRequest.execute();
这不起作用,我收到以下异常:
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'access_token': was expecting ('true', 'false' or 'null')
我调查了一下,发现来自 Github 的响应不是 json 格式(JacksonFactory 期望的),但实际上看起来像这样:
access_token=xxxxxxxxxxx&scope=user%3Aemail&token_type=bearer
我在 https://developer.github.com/v3/media/#request-specific-version 中发现我需要将请求的 Accept http header 设置为 application/vnd.github。 v3+json 用于 return json 格式的内容。
如何使用 Google 的 oauth2 api 执行此操作?
编辑:
根据 tinker 的回复,我通过添加以下内容解决了问题:
tokenRequest.setRequestInitializer(new HttpRequestInitializer()
{
@Override
public void initialize(HttpRequest request) throws IOException
{
request.getHeaders().setAccept("application/json");
}
});
您必须创建一个 HttpRequest 并向其添加 headers。查看 javadoc 以在此处设置请求 headers。
从 AuthorizationCodeTokenRequest
您可以使用 getRequestInitializer()
获得 HttpRequestInitializer
。如果这是 null 那么你可以创建一个初始化器并将 setRequestInitializer()
与新创建的 object.
一起使用
使用初始化程序,您现在可以 initialize
具有所需 headers 的请求。
我还没有测试过,所以我不是很确定,但是从 docs 来看,这似乎是唯一的方法。
我正在尝试使用混合解决方案为我的网站实施 "sign in with Github" 功能 - 该网站的 javascript 执行初始 login/credentials 和重定向 url用于 tomcat servlet 继续访问令牌请求。
我正在使用 Google API oauth2 库用于 Java。
我的代码目前是这样的:
AuthorizationCodeTokenRequest tokenRequest =
new AuthorizationCodeTokenRequest(
new NetHttpTransport(),
new JacksonFactory(),
new GenericUrl("https://github.com/login/oauth/access_token"),
code)
.setClientAuthentication(
new ClientParametersAuthentication(
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET));
TokenResponse tokenResponse = tokenRequest.execute();
这不起作用,我收到以下异常:
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'access_token': was expecting ('true', 'false' or 'null')
我调查了一下,发现来自 Github 的响应不是 json 格式(JacksonFactory 期望的),但实际上看起来像这样:
access_token=xxxxxxxxxxx&scope=user%3Aemail&token_type=bearer
我在 https://developer.github.com/v3/media/#request-specific-version 中发现我需要将请求的 Accept http header 设置为 application/vnd.github。 v3+json 用于 return json 格式的内容。
如何使用 Google 的 oauth2 api 执行此操作?
编辑: 根据 tinker 的回复,我通过添加以下内容解决了问题:
tokenRequest.setRequestInitializer(new HttpRequestInitializer()
{
@Override
public void initialize(HttpRequest request) throws IOException
{
request.getHeaders().setAccept("application/json");
}
});
您必须创建一个 HttpRequest 并向其添加 headers。查看 javadoc 以在此处设置请求 headers。
从 AuthorizationCodeTokenRequest
您可以使用 getRequestInitializer()
获得 HttpRequestInitializer
。如果这是 null 那么你可以创建一个初始化器并将 setRequestInitializer()
与新创建的 object.
使用初始化程序,您现在可以 initialize
具有所需 headers 的请求。
我还没有测试过,所以我不是很确定,但是从 docs 来看,这似乎是唯一的方法。