Получить папку ресурсов в файле Java-войны
Я создаю веб-сервис REST, который использует keyczar для шифрования. Я сгенерировал как открытый, так и закрытый ключи и поместил их в src/main/resources/RSA.
Для создания экземпляра шифра мне нужно передать ему расположение файлов, например Crypter crypterPrivate = new Crypter(PATH_RSA + "/private");
но у меня возникают проблемы с расположением папки RSA при развертывании файла war.
Я пробовал некоторые вещи, которые я гуглил, как InputStream, но это не тот случай, так как я не хочу передавать какой-либо файл, кроме местоположения папки RSA. Также перепробовал несколько разных папок, таких как /WEB-INF/classes/RSA
(это где находится в файле войны).
Какие-нибудь советы? Спасибо
3 ответа
Если keyczar может взять URL для своего ключевого местоположения, то this.getClass().getResource("/RSA/private")
даст вам подходящий URL. Если для этого требуется собственный путь к файлу, вам придется использовать
ServletContext ctx = // ...
String pathToKey = ctx.getRealPath("/WEB-INF/classes/RSA/private");
Как именно вы получаете ServletContext
зависит от вашего инструментария. Обратите внимание, что это будет работать только в том случае, если файл WAR раскрывается на диске при его развертывании, и не будет работать, если приложение запускается непосредственно из сжатого файла WAR.
Вы можете получить доступ к этому файлу через classpath.
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);