gpt4 book ai didi

java - 使用 Java 对二进制文件进行访问控制

转载 作者:行者123 更新时间:2023-11-30 05:10:42 26 4
gpt4 key购买 nike

情况是这样的:

我们有一些二进制文件(PDF、PPT、ZIPz 等)存储在与我们的应用程序不同的服务器中。我们需要让它们可供应用程序中的用户使用。但是文件具有极其敏感的信息,除了有权访问这些文件的用户之外,其他任何人都无法读取这些信息,这意味着我们需要先验证尝试访问该文件的用户,然后才能下载该文件。

这就是我们解决这个问题的方法:

  1. 我们从远程服务器获取文件,并将其存储在非公共(public)位置。
  2. 我们将文件读入字节数组,然后删除该文件。
  3. 我们使用响应的输出流通过 JSP 写入文件。 (我们无法通过 servlet 刷新它,因为我们使用的是无法修改的专有 MVC,因此所有输出都是 JSP,因此我们得到 java.lang.IllegalStateException 但它有效)。

我对该解决方案的三个方面感到担忧;文件大小将极大地影响堆大小,文件大小限制为最大字节[Integer.MAXSIZE],最后每次有人下载文件时我们都会得到一个 java.lang.IllegalStateException 因为我们正在调用response.getOutputStream( ),所以我们的日志增长了很多。(我们无法通过 servlet 刷新它,因为我们使用的是无法修改或扩展的专有 MVC)

我很确定有一种更优雅的方法可以做到这一点。

有什么想法吗?

最佳答案

确实只是不要将其存储在本地。您将得到它作为 InputStream从其他地方来的,对吗?只需立即将其写入 OutputStream的响应。这样就不需要在 Java 内存或本地磁盘文件系统中获取它。这意味着您应该将获取文件的逻辑放在JSP 文件中。糟糕,糟糕,但由于这显然是一个专有框架......

然后是IllegalStateException部分,您只需确保 scriptlet 之外没有空格,包括换行符。它将全部通过 response.getWriter() 隐式写入,但这不可能,因为您已经调用 response.getOutputStream()对于该文件。删除外面的所有东西<% %>在 JSP 中。如有必要,将多个 scriptlet 粘合在一起。不要忘记删除文件底部的最后一个换行符。

例如并非如此:

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

但更重要的是:

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

祝您使用此网络应用程序好运。

关于java - 使用 Java 对二进制文件进行访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com