0

我很抱歉,因为我知道这个问题太笼统了,但我是新手,所以我很难让这个问题更具体。
我正在开发一个客户端存在一些安全问题的应用程序。他不希望用户能够打印屏幕或复制(ctrl+c 程序的数据。现在当我开始处理这个问题时,我发现当这些击键时,他的操作系统会复制其缓冲区中的数据。现在我试图检查每当用户击键ctrl+cprintscreen然后我的应用程序突然刷新缓冲区(或缓存我们所说的任何内容)。现在我的问题是

1:如何使用 Java 刷新窗口的缓冲区?我应该检查哪个类 API这个?(因为我搜索了很多,但我没有找到路:(所以现在是 SO 专家的时间)

2:这个 flushBuffer 代码是否适用于所有操作系统?或者我是否需要对 Windows/Linux/Mac 进行单独检查。
谢谢

4

4 回答 4

2

要禁用应用程序中任何组件的复制+粘贴,您可以执行(取自Disabling 'paste' in a jTextfield

textComponent.setTransferHandler(null);

但除此之外的任何事情都将成为黑客攻击。您可以使用jnativehook全局收听打印屏幕,然后可能会以某种方式关闭您的窗口。我不知道,偏执狂是一件很棘手的事情。

于 2013-03-28T05:54:05.947 回答
1

您可以清除复制粘贴缓冲区,如下所述:

只是有空文本并将其复制到缓冲区。

除此之外,您可以做的可靠的事情并不多。

代码将类似于:

Action action = new DefaultEditorKit.CopyAction();
action.actionPerformed(
   new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));

编辑:对于网络应用程序,请参阅此答案,以这种方式使用剪贴板 jquery 插件

于 2013-03-28T05:51:54.563 回答
0

根据要求/安全问题,清除内存(在允许数据写入后)是错误的设计。最好覆盖击键。喜欢ctrl/alt+(any key)printscr

要覆盖关键行为,您需要实现KeyListener. 一旦您为该键定义了自定义行为,它将不允许默认操作(如复制/剪切..)

于 2013-03-28T05:34:18.900 回答
0

这种替代方法怎么样:

  1. 假设您的程序使用 Swing UI,仅在用户关注窗口时显示敏感数据,当用户关注另一个窗口/程序时,使数据不可见
  2. 假设您使用的是 Windows,您可以使用本文中提到的组策略禁用打印屏幕
  3. 使用其他海报建议的防止复制粘贴机制

老实说,我还没有尝试过,我不确定它是否会起作用。它也可能取决于操作系统

于 2013-03-28T05:41:31.070 回答