我有一个使用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。
我们找到了以下三种可能的解决方案:
"Content-Security-Policy"
头,添加外部Web服务返回的IP。这是不可行的,因为"Content-Security-Policy"
标头中不允许使用IP "Content-Security-Policy"
头的Java类,使该头不适用于调用getImage REST服务的请求的URI:String uri=request.getRequestURI();
//...
if(!uri.endsWith("/cartola")) {
//apply the "Content-Security-Policy" as shown above
}
//...
这会导致安全问题,因此也是不可行的
第三个解决方案分为以下步骤:
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,其中包含我创建的文本文件。但是,我不知道如何通过浏览器访问该文件。
简而言之,以上所有问题都归结为以下三个问题:
预先感谢