我正在将Java命令行应用程序打包在一个使用Google的某些API的单个JAR文件中。
我需要通过私钥“ Credentials.p12”设置一个GoogleCredential对象。
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("xxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT))
.setServiceAccountUser(emailAccount)
//THE CODE BELOW IS IMPORTANT: I need to change this
.setServiceAccountPrivateKeyFromP12File(new File("Credentials.p12"))
.build();
directory = new Directory.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("My Cmd App")
.build();
现在,我可以使其工作,但是文件“ Credentials.p12”位于打包的JAR文件外部。
如何使用JAR内部的p12文件使其工作?
从本文档中,我认为我可以使用的唯一其他选择是使用PrivateKey对象的方法变体。我正在考虑使用InputStream从类路径中获取p12文件:
InputStream is = this.getClass().getResourceAsStream("Credentials.p12");
我绝对不知道该怎么做。
在回答之前,请确保您具有使用Google
OAuth2库的经验。而且,请不要像将资源复制到临时文件这样的黑客:出于某种原因,Credential.p12的单个版本应保留在JAR中。
深入研究GoogleCredential.Builder
类源代码后,我意识到了以下几点:
"notasecret"
与别名的密码相同"privatekey"
使用以下代码从资源InputStream构建私钥:
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(this.getClass().getClassLoader().getResourceAsStream("Credentials.p12"), "notasecret".toCharArray());
PrivateKey pk = (PrivateKey)keystore.getKey("privatekey", "notasecret".toCharArray());
我能够将私钥加载到GoogleCredential Builder中:
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("xxxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT))
.setServiceAccountUser(emailAccount)
.setServiceAccountPrivateKey(pk) //<----THIS
.build();
问题内容: 顾名思义,我需要Google服务帐户api访问所需的.p12文件。为了获得连接到api的凭据,有一个字段.setServiceAccountPrivateKey(PrivateKey privateKey)。那么,最简单的方法是什么?我在类路径中有一个资源文件夹,因此,如果在其中添加p12文件,则可以从getClass()。getResource()中获取资源作为inputStre
正如标题所示,我有谷歌服务帐户api访问所需的。p12文件。为了获得连接到api的凭据,有一个字段。SetServiceAccountPrivateKey(PrivateKey PrivateKey)。那么,最简单的方法是什么呢?我在类路径中有一个resources文件夹,所以如果我在那里添加p12文件,我可以从getClass().getResource()中以inputStream或URL的形
然后,为了生成CA要求的,我执行了以下操作: CA使用我存储在名为的文件中的证书进行响应 现在我想将必要的组件(私钥、公钥(?)和证书)捆绑到单个中。为此,我运行了以下操作: 但我收到以下错误消息: 我怎样才能完成这件事呢?
问题内容: 我正在尝试浏览特定用户的推文,并获得对该推文的所有回复。我发现twitter的APIv1.1不直接支持它。 是否有破解或变通方法来获取特定推文的回复。我正在使用python Streaming API。 问题答案: 有使用REST API的解决方法。 您将需要要查找回复的原始推文作者的id_str和@username。 您应该将Search API用于作者的“ @用户名”。浏览结果以查
问题内容: 上传之前,有没有一种方法可以使用angularJS在输入字段中获取所选文件的名称,路径和大小? 任何人都可以帮助解决这个问题吗? 问题答案: HTML5 File API将为您尝试上传的每个文件提供一个对象。该对象将具有and 属性,该属性将为您提供文件大小(以字节为单位)和文件名。 但是,用户计算机上文件的物理路径没有属性。 您可以在MDN上阅读有关此内容的更多信息:https :