2

USB 経由でワークステーションに接続された POS プリンターとキャッシュ ドロワーを操作する機能を備えた Java パッケージを実装しました。また、このパッケージの機能を利用するアプレットを実装して、POS Web サイトから呼び出されることを期待しています。

アプレットを Eclipse 内から実行すると、すべてがうまくいきます。ブラウザ内からアプレットを実行すると、パッケージが USB 経由で接続された周辺機器にアクセスできないようです。サードパーティ (JavaPOS) コードから次のようなエラーが表示されます。

jpos.JposException: デバイスの通信チャネルをオープンできませんでした。デバイスを確認して再試行してください。

アプレットは自己証明書で署名されています。いくつかのコードを投稿したいと思いますが、エラーは、使用中の POS プリンターの製造元固有のドライバーに埋め込まれている場所からスローされます。

問題は、ブラウザのサンドボックス内から、アプレットが USB 経由で接続された周辺機器にアクセスできないことだと思います。
これは事実でしょうか?もしそうなら、署名されたアプレット内から USB 周辺機器にアクセスする方法はありますか?
アプレットが USB 周辺機器にアクセスできない場合、Web サイトはアクセスできるコードをどのように呼び出すことができるでしょうか?

4

4 に答える 4

2

あなたの質問に対する答えはわかりませんが、この問題にさらに光を当てる実験があります。

Applet.init()コールのオープニングラインでSystem.setSecurityManager(null)。次に、USBに接続してみます。

  • アプレットが信頼できる場合、への呼び出しsetSecurityManager(null)は成功し、の最後の残りを削除しSecurityManagerます。(はい、信頼できるアプレットにもセキュリティマネージャーがありますが、サンドボックス化されたアプリのセキュリティマネージャーよりもはるかに制限が少なくなっています。)
  • USBが検出された場合は、信頼できるセキュリティマネージャが変更されたことを示しています。最近、そのような変化が数多くありました。

このようなコードを本番環境に導入することを提案しているわけではないことに注意してください。アプレットが他のアプレットと同じJREで実行されている場合、SMを無効にすると、他のアプレットの特権も上がる可能性があります。

于 2011-04-17T19:45:12.473 に答える
1

JRE 1.6を使用するXPおよびWin7 32ビットのEpson TM-H6000IIIで同様の問題が発生しました。管理者はデバイスを使用できましたが、「ユーザー」は使用できませんでした。Java コンソールのレポート:

Sep 23, 2011 3:38:47 PM com.xxxx.printer.epson.EpsonPrinter findPrinter
INFO: Error opening PrinterIII: jpos.JposException: 
    Could not connect to service with logicalName = 
    PrinterIII: Exception.message=Property or stream open error.

JRE のインストールに権限の問題があったようです。JREを再インストールすると、問題はすぐに解決しました。

于 2011-09-28T00:59:02.553 に答える
0

Star Micronics チームから、「...javapos ドライバーは Web ブラウザー印刷をサポートしていない」というフィードバックを受け取りました。

ところで、 System.setSecurityManager(null) は、セキュリティに関連していると思われる問題を明確にするための優れた方法であることが判明しました。ありがとうアンドリュー。

于 2011-05-13T21:23:22.693 に答える