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



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

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

我试过一些东西,我已经谷歌像InputStream,但它不是这种情况,因为我不想传递任何文件,但RSA文件夹的位置。我也试过几个不同的文件夹,比如/WEB-INF/classes/RSA(它位于war文件中)。

提示吗?谢谢你

如果keyczar可以为其密钥位置取URL,那么this.getClass().getResource("/RSA/private")将为您提供合适的URL。如果需要本地文件路径,则必须使用

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

确切地说,您如何获得ServletContext取决于您的工具包。注意,这只会在部署WAR文件时在磁盘上展开时起作用,如果应用程序直接从压缩的WAR文件运行,它将不起作用。

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

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

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

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

KeyczarClassLoaderReader reader = new KeyczarClassLoaderReader(PATH_RSA + "/private");
Crypter crypterPrivate = new Crypter(reader);

相关内容

  • 没有找到相关文章

最新更新