在java war文件中获取资源文件夹

时间:2013-01-15 10:42:58

标签: java file file-io war keyczar

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

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

我尝试了一些像InputStream一样的Google搜索,但事实并非如此,因为我不想传递任何文件而是传递RSA文件夹位置。还尝试了几个不同的文件夹,如/WEB-INF/classes/RSA(它位于war文件中)。

任何提示?谢谢

3 个答案:

答案 0 :(得分:2)

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

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

确切地说,如何掌握ServletContext取决于您的工具包。请注意,这仅在部署WAR文件时在磁盘上展开时才有效,如果应用程序直接从压缩的WAR文件运行,则无法正常工作。

答案 1 :(得分:0)

您可以通过类路径访问此文件。

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/RSA");
File resourceFile = new File(resourceUrl.toURI());

答案 2 :(得分: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);