如何在 com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver 中设置自定义 RedirectUri

问题描述

我正在开发一个与谷歌 API(谷歌表 API)集成的 Java 应用程序

我正在尝试遵循 google 开发者网站中提供的示例。链接https://developers.google.com/sheets/api/quickstart/java#step_3_set_up_the_sample

他们使用 LocalServerReceiver 创建了如下所示的重定向 uri。

LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();

它正在 com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp => authorize() 方法中使用,如下所示:

String redirectUri = receiver.getRedirectUri();

这是receiver.getRedirectUri() 生成uri的方式:

public String getRedirectUri() throws IOException {

    server = HttpServer.create(new InetSocketAddress(port != -1 ? port : findOpenPort()),0);
    HttpContext context = server.createContext(callbackPath,new CallbackHandler());
    server.setExecutor(null);

    try {
      server.start();
      port = server.getAddress().getPort();
    } catch (Exception e) {
      Throwables.propagateIfPossible(e);
      throw new IOException(e);
    }
    return "http://" + this.getHost() + ":" + port + callbackPath;
}

因为我是在本地主机上运行的,所以 getRedirectUri() 返回一个像这样的网址:

http://localhost:8888/Callback

我想要的是提供一个自定义 url,因为我使用 ngrok 来公开我的本地主机。

例如:如果我访问将指向我的本地主机的网址“paradise.au.ngrok.io”。

所以我需要传递“paradise.au.ngrok.io”作为重定向网址。

有人能帮我实现这个目标吗?

谢谢。

解决方法

您可以简单地使用 setHost() 方法并将重定向 URI 设置为您的 ngrok 之一。