如何获取PDF远程文件,存储在Web应用程序中,获取URL并显示

时间:2019-03-29 15:58:07

标签: java jquery rest pdf weblogic

我有一个使用Spring,Hibernate和REST以及JQuery的JSP Web应用程序,以便通过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 Web服务(getImage)。该Web服务调用一个外部Web服务,该服务将远程URL返回到PDF文件。然后将该URL用作src,并通过JQuery定义的模式从JSP页面直接显示该URL:

$.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");
     }
});

外部Web服务运行良好,不得修改。

但是,当浏览器返回"Content-Security-Policy"中未定义的URL时,浏览器出于明显的原因会阻止URL的内容,并且不会显示PDF。当前,外部Web服务会提供IP地址而不是DNS。

我们找到了以下三种可能的解决方案:

  1. 修改"Content-Security-Policy"头,添加外部Web服务返回的IP。这是不可行的,因为"Content-Security-Policy"标头中不允许使用IP
  2. 修改添加了"Content-Security-Policy"头的Java类,使该头不适用于调用getImage REST服务的请求的URI:
String uri=request.getRequestURI();
//...
if(!uri.endsWith("/cartola")) {
   //apply the "Content-Security-Policy" as shown above
}
//...

这会导致安全问题,因此也是不可行的

  1. 远程获取外部Web服务提供的PDF文件的字节,将字节存储在Web应用程序内的本地文件中,并通过任何浏览器显示存储的PDF。这是唯一可行的解​​决方案。

第三个解决方案分为以下步骤:

a。 “远程获取外部Web服务提供的PDF文件的字节”。经过研究,我们可以使用以下链接提供的一种解决方案:Reading a remote file using Java,因此到目前为止,还没有问题。

b。 “将字节存储在Web应用程序内部的本地文件中,并通过任何浏览器显示存储的PDF”。问题在于,由于我正在使用Weblogic(并且我是Weblogic中的新手),所以我不知道将文件放置在何处。使用JBoss很容易:只需在/ server / default / deploy /中创建文件夹,但在Weblogic中找不到这样的路径。

此外,我尝试了以下操作:手动创建一个名为pdfs的文件夹,并在那里创建一个文本文件。该文件夹是在以下路径中创建的:/ user_projects / domains / base_domain / pdfs,其中包含我创建的文本文件。但是,我不知道如何通过浏览器访问该文件。

简而言之,以上所有问题都归结为以下三个问题:

  1. 在Weblogic中部署时,Web应用程序的物理位置在哪里
  2. 为了从浏览器访问PDF,必须使用包含Web应用程序的URL。

预先感谢

0 个答案:

没有答案