OAuth2 Java - 如何设置Accept标头

时间:2015-04-16 22:11:03

标签: java oauth

我正在尝试使用混合解决方案为我的网站实现“使用Github登录”功能 - 网站的javascript执行初始登录/凭据,重定向网址用于继续访问令牌请求的tomcat servlet。

我正在使用适用于Java的Google API oauth2库。

我的代码目前看起来像这样:

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标头设置为 application / vnd.github.v3 + json ,以便在json中返回一些内容格式。

如何使用Google的oauth2 api执行此操作?

编辑: 根据{{​​3}}的回复,我解决了以下问题:

tokenRequest.setRequestInitializer(new HttpRequestInitializer()
{
    @Override
    public void initialize(HttpRequest request) throws IOException
    {
        request.getHeaders().setAccept("application/json");
    }
});

1 个答案:

答案 0 :(得分:0)

您必须创建一个HttpRequest并添加标题。请查看javadoc以设置请求标头。

AuthorizationCodeTokenRequest,您可以使用HttpRequestInitializer获取getRequestInitializer()。如果这是null,那么你可以创建一个initalizer并使用setRequestInitializer()和新创建的对象。

使用初始化程序,您现在可以initialize具有所需标题的请求。

我没有对此进行过测试,所以我不是很确定,但从docs来看,这似乎是唯一的方法。