この質問が一般的すぎることはわかっていますが、私はこれに慣れていないため、この質問をより具体的にすることは困難です。
クライアントにセキュリティ上の問題があるアプリケーションに取り組んでいます。彼は、ユーザーが画面を印刷したり、プログラムのデータをコピーしたり (ctrl+c) したりしたくありません。これに取り組み始めたとき、これらのキーストローク時に OS がバッファ内のデータをコピーすることがわかりました。 make は、ユーザーがキー ストロークを押すたびに、ctrl+c
またはprintscreen
アプリケーションが突然バッファをフラッシュする (または、これを言うと何でもキャッシュする) ことを確認します。私の質問は
1: Java を使用してウィンドウのバッファをフラッシュするにはどうすればよいですか?これは? (私はたくさん検索しましたが、方法が見つかりませんでした:(だから、SOの専門家の時間です)
2:この flushBuffer コードはすべての OS で機能しますか? または、Windows/Linux/Mac で個別にチェックする必要がありますか。
ありがとう
4 に答える
アプリ内の任意のコンポーネントからのコピーと貼り付けを無効にするには ( jTextfield で「貼り付け」を無効にするから取得)
textComponent.setTransferHandler(null);
しかし、それを超えるものはハックになります。jnativehookを使用してプリント スクリーンをグローバルにリッスンし、何らかの方法でウィンドウをブラックアウトできます。わかりません、パラノイアはトリッキーなことです。
ここで説明されているように、コピー ペースト バッファをクリアできます。
- http://docs.oracle.com/javase/tutorial/uiswing/dnd/textpaste.html
- http://docs.oracle.com/javase/tutorial/uiswing/dnd/listpaste.html
空のテキストを用意して、それをバッファにコピーするだけです。
それを超えて、あなたができる信頼できることはそれほど多くありません。
コードは次のようになります。
Action action = new DefaultEditorKit.CopyAction();
action.actionPerformed(
new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));
編集: Web アプリの場合は、クリップボード jquery プラグインをこのように使用して、この回答を参照してください。
要件/セキュリティの問題によると、メモリをクリアするのは間違った設計です(データをメモリに書き込めるようにした後)。キーストロークをオーバーライドしたほうがよいでしょう。のようなctrl/alt+(any key)
またはprintscr
主要な動作をオーバーライドするには、実装する必要がありますKeyListener
。そのキーのカスタム動作を定義すると、デフォルトのアクション (コピー/カットなど) が許可されなくなります。
この代替アプローチはどうですか:
- プログラムが Swing UI を使用していると仮定すると、ユーザーがウィンドウにフォーカスしたときにのみ機密データを表示し、ユーザーが別のウィンドウ/プログラムにフォーカスしたときに、データを非表示にします。
- Windows を使用していると仮定すると、この投稿で説明されているように、グループ ポリシーを使用してプリント スクリーンを無効にすることができます。
- 他の投稿者が提案するコピペ防止メカニズムを使用する
正直なところ、私はこれを試したことがなく、うまくいくかどうかわかりません。また、OSに依存する可能性があります