1

我在 jsp 页面中遇到各种问题,因为我正在尝试读取 .p12 文件(谷歌服务帐户密钥文件)并且 jar 文件中的方法找不到它。我会尝试对问题进行非常详细的描述(作为我的第一个问题,我更愿意提供太多信息而不是太少信息)。

该 jsp 文件名为 modDrive.jsp,它位于 WebContent 文件夹中的动态 Web 项目中。我已将 miGoogle-drive.jar 添加到 lib 文件夹(并将源文件添加到 WEB-INF/classes/miGoogle 文件夹)。

modDrive.jsp 对 jar 文件中的 DriveConnect 静态类进行这两次调用:

DriveConnect.setKEY_PATH("privatekey.p12");
DriveConnect.entrada("email@domain.net");

问题出在 entrada 方法中:

public static void entrada(String serviceAccountUser) {
        try {
          try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            GoogleCredential googleCredential = null;

                googleCredential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                        .setJsonFactory(JSON_FACTORY)
                        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                        .setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
                        .setServiceAccountPrivateKeyFromP12File(KEY_FILE)
                        .setServiceAccountUser(serviceAccountUser)
                        .build();

具体问题是没有找到 KEY_FILE (从先前设置的 KEY_PATH 派生),显然我得到一个文件未找到错误...正如您可以想象的那样,我试图将 .p12 文件放在所有文件夹中,但什么也没有我试图将 / 作为 KEY_PATH 字符串的第一个字符,但没有办法......

任何帮助将不胜感激。:-)

哦,是的,之前的代码作为 cmd 项目(没有 jar 文件)可以完美运行,在该项目中,.p12 文件位于项目的根文件夹中。

4

1 回答 1

0

仅传入相对文件名可能会导致它查看进程的工作目录,这可能会在不同的运行时环境之间发生变化。

如果可以在 setServiceAccountPrivateKeyFromP12File() 中传递绝对路径名,则可以通过以下方式可靠地获取绝对路径:

new File(MyClass.class.getResource("privatekey.p12").toURI()).getAbsolutePath()

本例中的“privatekey.p12”文件名是相对于 MyClass 而言的,您可能需要进行相应的调整。

于 2013-06-27T13:31:33.313 回答