1

我正在创建一个使用 keyczar 进行加密的 REST Web 服务。我已经生成了公钥和私钥,并将它们放在 src/main/resources/RSA 下。

要实例化加密器,我需要将文件的位置传递给它,Crypter crypterPrivate = new Crypter(PATH_RSA + "/private");但是当我部署 war 文件时,我遇到了 RSA 文件夹位置的问题。

我已经尝试过一些我在谷歌上搜索过的东西,比如 InputStream,但情况并非如此,因为我不想传递任何文件,而是传递 RSA 文件夹位置。还尝试了几个不同/WEB-INF/classes/RSA的文件夹,例如(它位于war文件中)。

有小费吗?谢谢

4

3 回答 3

2

如果 keyczar 可以为其关键位置获取一个 URL,那么this.getClass().getResource("/RSA/private")将为您提供一个合适的 URL。如果它需要本机文件路径,那么您将不得不使用

ServletContext ctx = // ...
String pathToKey = ctx.getRealPath("/WEB-INF/classes/RSA/private");

究竟如何获得ServletContext取决于您的工具包。请注意,这仅在您部署 WAR 文件时在磁盘上展开时才有效,如果应用程序直接从压缩的 WAR 文件运行,则此方法无效。

于 2013-01-15T10:48:17.100 回答
0

You can access this file via the classpath.

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/RSA");
File resourceFile = new File(resourceUrl.toURI());
于 2013-01-15T10:46:57.910 回答
0

我很确定 Keyczar 的 Java 版本不支持此功能,但我相信有人在他们的问题跟踪器中提交了一个小补丁来添加它:

http://code.google.com/p/keyczar/issues/detail?id=55

KeyczarClassLoaderReader reader = new KeyczarClassLoaderReader(PATH_RSA + "/private");
Crypter crypterPrivate = new Crypter(reader);
于 2013-01-15T18:55:39.797 回答