Java对接Google Sheets API时如何设置LocalServerReceiver自定义RedirectUri
解决方案
前提配置
- 首先在Google Cloud控制台对应的OAuth 2.0客户端ID配置中,将你的ngrok完整回调地址(示例:
https://paradise.au.ngrok.io/Callback)添加到「授权重定向URI」列表中,否则Google会拒绝回调请求。 - 启动ngrok时绑定本地8888端口,执行命令:
ngrok http 8888,确保ngrok流量正常转发到本地服务端口。
代码实现方案
默认的LocalServerReceiver生成的重定向地址强制使用本地host+端口,我们可以通过继承重写getRedirectUri方法替换为ngrok地址,具体实现如下:
1. 自定义Ngrok适配的Receiver类
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import java.io.IOException; public class NgrokLocalServerReceiver extends LocalServerReceiver { // 替换为你自己的ngrok域名,不需要加后缀路径 private static final String NGROK_DOMAIN = "https://paradise.au.ngrok.io"; @Override public String getRedirectUri() throws IOException { // 先执行父类的服务启动逻辑,保留端口监听、回调处理的原有能力 super.getRedirectUri(); // 直接返回ngrok地址+默认回调路径,默认回调路径为/Callback return NGROK_DOMAIN + getCallbackPath(); } }
2. 替换原有Receiver实例
将原来的构造代码:
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
替换为自定义类的实例即可:
LocalServerReceiver receiver = new NgrokLocalServerReceiver.Builder().setPort(8888).build();
注意事项
- 如果使用ngrok免费版,每次重启ngrok都会生成随机域名,需要同步更新Google Cloud控制台的重定向URI配置、以及代码中的
NGROK_DOMAIN值。 - 回调路径默认是
/Callback,如果自定义过路径需要对应修改配置。
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

