2013-01-15 84 views
1

我正在創建一個使用keyczar進行加密的REST web服務。我生成了公鑰和私鑰,並將它們放在src/main/resources/RSA下。獲取java war文件中的資源文件夾

要實例化加密器,我需要傳遞文件的位置,如Crypter crypterPrivate = new Crypter(PATH_RSA + "/private");,但我在部署WAR文件時遇到了RSA文件夾位置問題。

我已經嘗試了一些我已經像InputStream一樣的東西,但它不是這種情況,因爲我不想傳遞任何文件,但RSA文件夾的位置。也嘗試了幾個不同的文件夾,如/WEB-INF/classes/RSA(它位於war文件中)。

任何提示?謝謝

回答

0

你可以通過classpath訪問這個文件。

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

這樣resourceUrl爲空。如果'URL resourceUrl = URL.class.getResource(「」);'我得到類的完整路徑 –

+0

您的/ WEB-INF/classes/RSA在類路徑中嗎? – Jayamohan

+0

\t' \t \t \t \t \t <屬性名= 「maven.pomderived」值=「true」/> \t \t \t

2

如果keyczar可以爲其關鍵位置獲取URL,那麼this.getClass().getResource("/RSA/private")會爲您提供合適的URL。如果它需要一個本地文件路徑,那麼你將不得不使用

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

究竟怎麼你得到的ServletContext的保持取決於你的工具包。請注意,這僅在WAR文件在部署時在磁盤上展開時才起作用,如果應用程序直接從壓縮的WAR文件運行,則該文件將不起作用。

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);