Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OAuth2.0和Google日历在Web上的应用_Java_Oauth_Google Calendar Api - Fatal编程技术网

Java OAuth2.0和Google日历在Web上的应用

Java OAuth2.0和Google日历在Web上的应用,java,oauth,google-calendar-api,Java,Oauth,Google Calendar Api,我对Java web应用程序的Google日历的URL回调有问题。我成功地跟踪了文档并在本地运行了它,但我现在正在尝试在EC2实例上运行它 Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user"); 上的快速入门教程中说,选择应用程序

我对Java web应用程序的Google日历的URL回调有问题。我成功地跟踪了文档并在本地运行了它,但我现在正在尝试在EC2实例上运行它

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user");
上的快速入门教程中说,选择应用程序类型为“其他”。这在当地对我很管用

但是,当我尝试在服务器上运行此程序时,我会在日志中找到要遵循的URL,并且该URL每次都会通过不同的端口与localhost进行回调。由于应用程序不再在本地主机上运行,因此从未收到回调

在阅读了一些之后,我需要在web服务器上实际运行时将凭据设置为“web应用程序”。这说明我需要定义“授权重定向URI”,并且需要有正确的端口

根据重定向到URL的教程,我使用了以下内容对用户进行身份验证:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
然后我在代码中设置端口,这样我就可以在凭据中输入相同的端口,然后进入客户机_secret.json(我的应用程序目前运行在8080上)

我是通过以下途径做到这一点的:

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user");
但是,这会引发绑定异常,因为该端口显然已在使用中

选择一个我知道是免费的端口(我尝试了9999)会让我进入页面,允许我进行身份验证,这是有意义的,因为URI与client_secret.json中声明的URI匹配。然后引发套接字绑定失败异常:

原因:java.lang.Exception:套接字绑定失败:[730048]只有一个 每个套接字地址(协议/网络地址/端口)的用法如下 通常是允许的


我在网上看到的许多示例都没有设置端口,这允许AuthorizationCodeInstalledApp选择一个空闲端口,但当我们需要在API凭据中指定授权重定向URI时,这将如何工作

我找到了解决办法。实际上,我在9999端口上运行了一些其他的东西,这就是为什么上面的方法在本地不起作用。AuthorizationCodeInstalledApp builder有一个setHost()方法,该方法适用于EC2实例

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user");

我找到了解决办法。实际上,我在9999端口上运行了一些其他的东西,这就是为什么上面的方法在本地不起作用。AuthorizationCodeInstalledApp builder有一个setHost()方法,该方法适用于EC2实例

Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setHost(REDIRECT_URI).setPort(9999).build()).authorize("user");

通常,当一个进程/程序正在使用某个端口,而另一个进程试图使用该端口时,会发生错误,从而导致冲突。由于某个程序已经在使用该特定端口,因此会阻止另一个程序使用该端口。因此,请确保使用自由端口。对于您关于OAuth的问题,您可以检查如何使用重定向URI。另外,请确保您使用的重定向URI必须与您在Google API控制台中为应用程序设置的重定向URI相同。通常,当一个进程/程序正在使用某个端口,而另一个进程试图使用该端口时,会发生错误,从而导致冲突。由于某个程序已经在使用该特定端口,因此会阻止另一个程序使用该端口。因此,请确保使用自由端口。对于您关于OAuth的问题,您可以检查如何使用重定向URI。还要确保您使用的重定向URI必须与您在Google API控制台中为应用程序设置的重定向URI相同。我面临一个类似的问题,我有一个非常简单的问题,setHost应该接收名称(example.com)还是IP(188.168.2.2)?有没有http://?我面临着一个类似的问题,我有一个非常简单的问题,setHost应该接收一个名称(example.com)还是一个IP(188.168.2.2)?有或没有http://?