【问题标题】:JSP- How to hide toolbar in backend when viewing PDF on browser?JSP-在浏览器上查看 PDF 时如何在后端隐藏工具栏?
【发布时间】:2019-05-05 19:40:51
【问题描述】:

我有一个 JSP 页面,当它被调用时会显示一个 PDF 文档。假设我以这种格式生成 URL:

http://localhost:8080/repository/file/view/viewPDF.jsp?fileID=27455

并将其发送给另一个用户。用户可以在他的浏览器上毫无问题地查看文档 (id:27455)。但是假设我想隐藏显示的 PDF 工具栏,因此不允许用户访问该工具栏。

我通过输入这个链接发现:

http://localhost:8080/repository/file/view/viewPDF.jsp?fileID=27455#toolbar=0

然后上面的这个将隐藏工具栏,但它很容易受到攻击,因为其他用户可以将它的值更改为 1 并且工具栏出现。我在想是否可以在后端代码内部隐藏它,但不知道如何。

我的视图PDF.jsp:

<%@page import="java.io.*"%>



<%@include file="../../../WEB-INF/jspf/mcre.jspf" %>



<%



    response.setContentType("application/pdf");
    boolean debug = true;
    try {


        String snodeid = request.getParameter("nodeID");
        long nodeid = Long.parseLong(snodeid);

        Pdfinfo pdf = PPFacade.getPDFInfo(nodeid);
        String pdfpath = pdf.getFfullpath();
        if (debug) {
            System.out.println("=============== PDF STREAM ================");
            System.out.println("pdfpath = "+ pdfpath);
        }

        //int len = (int)new File("D://test.pdf").length();
        int len = (int)new File(pdfpath).length();
        response.setContentLength(len);
        byte[] buf = new byte[len];
        FileInputStream pdfin = new FileInputStream(pdfpath);
        pdfin.read(buf);
        pdfin.close();
        OutputStream pdfout = response.getOutputStream();
        pdfout.write(buf,0,len);
        pdfout.flush();

        if (debug) {
            System.out.println("=============== END PDF STREAM ================");
        }

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

%>

<head>
    PDF

</head>

当然,我知道隐藏#toolbar 并非万无一失,因为任何具有此类知识的用户都可以轻松绕过它。

【问题讨论】:

  • 您为什么不总是隐藏工具栏并在新选项卡/窗口或 iframe 中显示 pdf?然后可以通过提供仅提供文档链接的“共享”按钮来共享链接。
  • 它的工作方式是我生成一个如上所示格式的普通链接并将其发送给其他人。有人能够在浏览器上输入 URL 并查看它。就像那样。
  • 另外,差点忘了,因为作为用户,我需要检查我是否有“权限”来打印和下载。如果是,则发送链接应允许工具栏=1,否则发送链接应允许工具栏=0。这就是我的逻辑。希望这是有道理的。
  • 如果我正确理解了这个问题,一些基于某些标准的用户必须有权访问工具栏,而其他用户则不应该。因此,我会在后端进行检查,如果当前用户应该能够看到工具栏(例如登录),然后在 jsp 中传递此信息,则在 jsp 中,工具栏是否根据该信息显示或不显示。通过 url 执行检查似乎不是一个“干净”的解决方案。
  • @Dimitris 我相信你做对了。我的意思是这不是一个好的解决方案,我也想不出更好的解决方案,因为即使隐藏工具栏,我也可以轻松地在 url 上添加toolbar=1,这会破坏目的,对吗?

标签: java jsp


【解决方案1】:

由于工具栏是浏览器的功能,而不是服务器或pdf文件,因此无法在不以某种方式通知浏览器的情况下强制显示或不显示它。

任何截获进入浏览器的信息的人确实可以修改该信息。

当然,即使您能够阻止这种情况,他们也可以随时将 PDF 下载到他们的文件系统并使用任何允许阅读 PDF 的工具(包括他们可以自己创建的工具)打开它。

所以不,你不能锁定这些东西。为什么你甚至想要?

最接近您的方法是将 PDF 嵌入到加载 PDF 查看器浏览器插件并使用 AJAX 请求到服务器以检索 PDF 内容的 div 中。但即便如此,也有人可以拦截到服务器的请求,并使用 curl 复制该请求,然后直接将流下载到文件中。

【讨论】:

  • 我明白了。但是我可以一起禁用工具栏为 0 并检查它的权限是否不允许?
  • @Daredevil 不,该权限标志只会影响您为显示它而制作的页面。它不会对仅设置该标志并拦截输出的 3rd 方查看器产生任何影响。
  • 你说得对,我可以很容易地点击 chrome 上的三点并点击 more tools 并点击另存为,它仍然会失败
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2015-10-23
相关资源
最近更新 更多