我正在使用Google日历客户端API并尝试通过Google进行身份验证
以下代码在独立应用程序中工作,而不在Web应用程序环境中工作
在网络应用的情况下,
setServiceAccountPrivateKeyFromP12File(File)
方法无法找到我提供的路径,我尝试了很多堆栈交换用户给出的答案。
但对我来说没有用。每次它只显示一条消息,文件路径(没有这样的文件或路径)。
不知道出了什么问题。请帮我找到解决这个问题的方法。
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))
.setServiceAccountPrivateKeyFromP12File(new File(CLIENT_SECRET)).build();
这里是private static final String CLIENT_SECRET="credentials/Test.p12"
;
我尝试使用ClassLoaders
,URL
,但没有用。总是抛出FileNotFoundException
我的项目是 maven 项目,代码位于相关jar文件中。
答案 0 :(得分:0)
这不是Google Client API的问题。
在网络应用程序中,我们应该提供绝对路径来创建文件实例。
通常,Web应用程序提供相对路径,因此无法在Java中使用此相对路径创建文件实例。
因为java.io.File
不了解相对路径。它只知道操作系统特定的绝对路径来创建文件的实例
为此,String absoluteDiskPath = servletContext.getRealPath("/credentials/secret.p12");
这是按预期工作的。
感谢您在评论中提供帮助。