我在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的,您可能需要相应地对其进行调整。