我正在创建一个使用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=55KeyczarClassLoaderReader reader = new KeyczarClassLoaderReader(PATH_RSA + "/private");
Crypter crypterPrivate = new Crypter(reader);