Как получить удаленный файл PDF, сохранить его в веб-приложении, получить его URL и отобразить его - PullRequest
0 голосов
/ 29 марта 2019

У меня есть веб-приложение JSP, которое использует Spring, Hibernate и REST, а также JQuery для получения данных через AJAX. Мне нужно это приложение, чтобы локально хранить файлы PDF внутри приложения, а затем показывать их в любом браузере, используя URL-адрес приложения.

Приложение JSP вставляет во все запросы, включая вызовы собственных REST WebServices, следующую политику:

response.setHeader("Content-Security-Policy", "default-src 'self' " + dns1 + " " + dns2 + " " + dns3 + " "+ dns4 + " 'unsafe-inline'; script-src 'self' 'unsafe-eval' " + site1 + " " + site2 + " 'unsafe-inline' ; connect-src 'self' " + dns1 + " " + dns2 + " " + dns3 + " "+ dns4 + "; img-src 'self' data: " + dns1 + " " + dns2 + " " + dns3 + " "+ dns4 + ";style-src 'self' 'unsafe-inline' " + dns5 + "; font-src 'self' fonts.gstatic.com data:");

Существует страница JSP, которая с помощью AJAX вызывает веб-службу REST (getImage), передающую некоторые параметры. Эта веб-служба вызывает внешнюю веб-службу, которая возвращает удаленный URL-адрес в файл PDF. Затем URL-адрес используется как src и отображается непосредственно со страницы JSP через модал, определенный с помощью JQuery:

$.ajax({
     url: 'getImage?cliente=96799250&folio='+folio+'&fecha='+fechasec+'&tipoDoc='+codTipoDoc,
     type: "get",
     async: false,
     success: function(data){
          var patt = /Error/;
          var res = patt.test(data);
          if(!res){
               $("#tituloFactura").text("Documento tipo " + tipoDoc + " Folio "+folio);
               $("#viewer").attr("src",data);                                                
               $("#dialogFactura").modal("show");
          } else {
               $("#tituloMsg").text("Error");
               $("#bodyMsg").text(data);
               $("#dialogMsg").modal("show");
          }
     },
     error: function(data){
          $("#tituloMsg").text("Error");
          $("#bodyMsg").text("Hubo un error al obtener documento");
          $("#dialogMsg").modal("show");
     }
});

Внешний веб-сервис работает хорошо, и его нельзя изменять.

Однако, когда он возвращает URL, который не определен в "Content-Security-Policy", браузер, по понятным причинам, блокирует содержимое URL, и PDF не отображается. В настоящее время внешний веб-сервис выдает IP-адрес вместо DNS.

Мы нашли следующие 3 возможных решения этой проблемы:

  1. Измените заголовок "Content-Security-Policy", добавив IP-адрес, возвращенный внешней веб-службой. Это невозможно, поскольку IP-адреса не разрешены в заголовке "Content-Security-Policy"
  2. Измените класс Java, добавив заголовок "Content-Security-Policy", сделав заголовок неприменимым к URI запроса, который вызывает службу getImage REST:
String uri=request.getRequestURI();
//...
if(!uri.endsWith("/cartola")) {
   //apply the "Content-Security-Policy" as shown above
}
//...

Это вызывает проблемы с безопасностью, поэтому также невозможно

  1. Удаленное получение байтов файла PDF, предоставленного внешней веб-службой, сохранение байтов в локальном файле внутри веб-приложения и отображение сохраненного PDF-файла через любой браузер. Это единственно возможное решение.

Третье решение состоит из следующих этапов:

а. Msgstr "Получить удаленно байты файла PDF, предоставленного внешним веб-сервисом". После некоторых исследований мы можем использовать одно из решений, приведенных по следующей ссылке: Чтение удаленного файла с использованием Java , поэтому проблем там пока нет.

б. Msgstr "Сохранить байты в локальном файле внутри веб-приложения и показать сохраненный PDF через любой браузер". Проблема в том, что, поскольку я использую Weblogic (и я новичок в Weblogic), я не знаю, где разместить файл. Использовать JBoss легко: просто создайте папку в / server / default / deploy /, но я не могу найти такой путь в Weblogic.

Также я попробовал следующее: Создайте вручную папку с именем pdfs и создайте там текстовый файл. Папка создается по следующему пути: / user_projects / domains / base_domain / pdfs, а внутри находится текстовый файл, который я создал. Однако я не знаю, как получить доступ к этому файлу через браузер.

В двух словах, все вышеперечисленное сводится к трем следующим вопросам:

  1. Где физически находится веб-приложение при развертывании в Weblogic
  2. Какой URL-адрес, содержащий веб-приложение, я должен использовать для доступа к PDF-файлу из браузера.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...