Получить папку ресурсов в файле 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);
Другие вопросы по тегам