基本的に、私は自己署名 (今のところ) を印刷する Java アプレットを持っています。アプレットに署名せずに印刷することはできますが、ユーザーが Web サイトにアクセスするたびにプロンプトを表示したくありません。最悪の部分は、PrinterJob オブジェクトに対して実行するすべての操作に対してプロンプトが表示されることです。ここで、証明書を受け入れると、印刷プロンプトが表示されなくなります。これは、まさに私が望んでいる動作です。残念ながら、証明書を拒否した場合は、印刷プロンプトを再度受け入れる必要があります。私がやりたいことは、証明書を拒否した場合にアプレットを停止することです。そのために、次のことを試しました。
public void init(){
doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
_appsm = System.getSecurityManager();
if (!hasPrintPermissions()) return null;
printer = new MarketplaceLabelPrinter();
LOG.info("Initialized");
return null;
}
});
}
/**
* Returns true if the applet has enough permissions to print
*/
public boolean hasPrintPermissions(){
try{
_appsm.checkPrintJobAccess();
} catch (SecurityException e) {
LOG.severe("Not enough priviledges to print.");
return false;
}
return true;
}
これはある程度機能しますが、ユーザーにプロンプトが表示されますが、これは望ましくありません。さらに悪いことに、このセキュリティ チェックはまったく役に立たないということです。なぜなら、[OK] を押しても「このアプレットによるプリンタへのアクセスを常に許可する」をチェックしない場合、セキュリティ チェックはプリンタへのアクセス権があると見なしますが、実際にはそうではありません。(参照: http://i.imgur.com/541YW.png )
要約すると、ユーザーが証明書を拒否した場合、アプレットの実行を停止したいと考えています。
みんな、ありがとう