我正在创建一个使用keyczar进行加密的REST Web服务。我已生成公钥和私钥,并将它们放在src / main / resources / RSA下。
要实例化加密器,我需要将Crypter crypterPrivate = new Crypter(PATH_RSA + "/private");
等文件的位置传递给它,但是在部署war文件时,我遇到了RSA文件夹位置的问题。
我尝试了一些像InputStream一样的Google搜索,但事实并非如此,因为我不想传递任何文件而是传递RSA文件夹位置。还尝试了几个不同的文件夹,如/WEB-INF/classes/RSA
(它位于war文件中)。
任何提示?谢谢
答案 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);