【问题标题】:Access rights to an Excel file created with Java对使用 Java 创建的 Excel 文件的访问权限
【发布时间】:2012-04-16 21:10:21
【问题描述】:

我正在创建一个 Excel 文件,它应该是只读的。为此,我使用: (sheetName).getSettings().setProtected(true); 每添加一张新工作表。

只有具有管理员权限的人才能获得对文件的完全访问权限,因此在确认用户具有管理员权限后,我会: (workbookName).getSheet(0).getSettings().setProtected(false);

具有管理员权限的人打开文件后,它不再是只读的,直到普通用户向其添加更多内容-再次.getSettings().setProtected(true);。换句话说,有人可以在管理员访问文件之后和非管理员之前更改文件。我不知道如何绕过它,也许你能帮助我?

--编辑--
用户正在向 excel 文件中添加数据,用信息文件填充单元格 - 读取工作簿、复制、添加一些信息、写入和关闭工作簿。非管理员用户可以直接打开它以查看他们添加的内容是否存在,或者查看其他用户添加的内容,但他们应该无法更改文件中的任何内容。

这是一个类似向导的应用程序,它会向用户询问数据,然后将单元格添加到文件中。添加数据的方法之一是here。该文件从用户那里收集个人信息。该应用程序仅用于添加数据,而不是用于访问它。用户只能通过双击输出直接访问文件,并且只能查看数据。管理员可以更改文件,其他用户不能这样做。

【问题讨论】:

  • stackoverflow.com/questions/2609301/… 展示了如何循环工作表。为了解决非管理员用户的问题,您可以在每次打开文件时设置保护(真/假取决于访问级别)。
  • 感谢您的链接,我整理出了循环播放的表格。但是,关于您对访问问题的建议,我不知道该怎么做。每次更改文件后,我都会设置保护(true 如果非管理员用户更改它,false 如果管理员这样做)。问题是,在管理员将保护设置为false 之后,非管理员将其设置回true 之前,有人可以“手动”(而不是通过软件)打开和修改文件,此时它应该是只读的。
  • 如果您知道管理员何时完成,您可以在那时重新启用保护
  • 您需要添加更多关于您的应用程序如何与 Excel 文件交互的详细信息 - 用户通过您的应用程序执行哪些任务,为什么用户还需要直接打开它?跨度>
  • 为什么不向非管理员用户提供主文件的副本?这样他们就可以查看内容,但他们是否可以编辑它并不重要。我仍然不清楚您的应用程序是如何设置的:Excel 文件托管在哪里——网络共享、Web 服务器或什么?所有用户都只有一个“主”文件吗?任何用户都可以双击文件打开它,还是您的 java 应用程序为他们提供访问权限?如果任何人都可以在读取模式下打开文件,那基本上是一个很难修复的坏主意。

标签: java excel jxl


【解决方案1】:

如果您愿意为商业软件付费,最新版本的ExtenXLS 对 Excel 支持的所有加密格式提供了完整的读写支持。只需构造一个EncryptedWorkBookHandle 而不是普通的WorkBookHandle。这将使用未经修改的 JRE 支持的最强密码,用于 XLS 的 RC4 和用于 XLSX 的 128 位 AES。如果您想在 OOXML 中使用 256 位 AES,并且您已经安装了 JCE unlimited policy,您可以使用 MSOfficeEncrypter 类来实现。

JExcelAPI 是一种流行的开源 Java 电子表格 API,似乎根本不支持加密。 Aspose.Cells,商业产品,supports stong encryption。 Actuate 的 e.Spreadsheet 的文档似乎已经从网上消失了,所以我不知道它是否支持加密。

由于免费提供的 Java 电子表格 API 似乎都不支持编写加密电子表格,因此如果您不愿意使用商业软件,则需要想出一个解决方法。例如,您可以将电子表格写入加密的 ZIP 文件。 java.util.zip 不支持加密,但看起来Zip4j 支持。

【讨论】:

    【解决方案2】:

    这就是问题,因为您告诉用户可以在管理员删除保护时简单地编辑它,似乎没有标准的替代方案。但是,如果这个文件正在使用中,那么没有其他人可以在外面修改它吗?因此,只需在管理员退出 excel 文件时再次保护它,并在管理员登录时删除保护。就像蒂姆说的那样。您可以创建单独的函数来编辑 excel 文件,然后执行

    禁用保护 写修改 启用保护

    在所有这些功能中。如果这是可行的,您可以使用 AspectJ 之类的东西来简化 禁用保护和启用保护 零件;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      相关资源
      最近更新 更多