Преглед изворни кода

修复:pdf.js 跨域问题

陈精华 пре 3 година
родитељ
комит
58b1b50c2e

+ 0 - 2
server/src/main/java/cn/keking/web/filter/FilterConfiguration.java

@@ -30,8 +30,6 @@ public class FilterConfiguration {
         Set<String> filterUri = new HashSet<>();
         filterUri.add("/onlinePreview");
         filterUri.add("/picturesPreview");
-        filterUri.add("/getCorsFile");
-        filterUri.add("/addTask");
         TrustHostFilter filter = new TrustHostFilter();
         FilterRegistrationBean registrationBean = new FilterRegistrationBean();
         registrationBean.setFilter(filter);

+ 3 - 5
server/src/main/resources/static/pdfjs/web/viewer.js

@@ -2019,7 +2019,7 @@ var validateFileURL;
 {
   var HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"];
 
-  validateFileURL = function validateFileURL(file, base) {
+  validateFileURL = function validateFileURL(file) {
     if (file === undefined) {
       return;
     }
@@ -2036,7 +2036,7 @@ var validateFileURL;
           protocol = _ref11.protocol;
 
       if (origin !== viewerOrigin && protocol !== "blob:") {
-        return (base.endsWith('/') ? base : base + '/') + 'getCorsFile?urlPath=' + encodeURIComponent(file);
+        throw new Error("file origin does not match viewer's");
       }
     } catch (ex) {
       var message = ex && ex.message;
@@ -2089,14 +2089,12 @@ function loadAndEnablePDFBug(enabledTabs) {
 function webViewerInitialized() {
   var appConfig = PDFViewerApplication.appConfig;
   var file;
-  var base;
   var disableDownload;
   var queryString = document.location.search.substring(1);
   var params = (0, _ui_utils.parseQueryString)(queryString);
   file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl");
-  base = 'base' in params ? params.base : appConfig.defaultUrl;
   disableDownload = 'disabledownload' in params ? params.disabledownload : 'false';
-  validateFileURL(file, base);
+  validateFileURL(file);
   var fileInput = document.createElement("input");
   fileInput.id = appConfig.openFileInputName;
   fileInput.className = "fileInput";

+ 6 - 1
server/src/main/resources/web/pdf.ftl

@@ -21,7 +21,12 @@
 </#if>
 </body>
 <script type="text/javascript">
-    document.getElementsByTagName('iframe')[0].src = "${baseUrl}pdfjs/web/viewer.html?base=${baseUrl}&file=" + encodeURIComponent('${finalUrl}') + "&disabledownload=${pdfDownloadDisable}";
+    var url = '${finalUrl}';
+    var baseUrl = '${baseUrl}'.endsWith('/') ? '${baseUrl}' : '${baseUrl}' + '/';
+    if (!url.startsWith(baseUrl)) {
+        url = baseUrl + 'getCorsFile?urlPath=' + encodeURIComponent(url);
+    }
+    document.getElementsByTagName('iframe')[0].src = "${baseUrl}pdfjs/web/viewer.html?file=" + encodeURIComponent(url) + "&disabledownload=${pdfDownloadDisable}";
     document.getElementsByTagName('iframe')[0].height = document.documentElement.clientHeight - 10;
     /**
      * 页面变化调整高度