我在jsp页面中遇到各种问题,因为我正在尝试读取.p12文件(Google服务帐户密钥文件),而jar文件中的方法找不到它。我会尽量对问题进行描述(作为我的第一个问题,我倾向于提供太多而不是太多的信息)。

该jsp文件称为modDrive.jsp,位于Dinamic Web Project的WebContent文件夹中。
我已将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文件位于项目的根文件夹中。

最佳答案

仅传递相对文件名可能会导致它在进程的工作目录中查找,该目录可以在不同的运行时环境之间进行更改。

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

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


在这种情况下,“ privatekey.p12”文件名是相对于MyClass的,您可能需要相应地对其进行调整。

10-08 09:21
查看更多