このトピックでは、署名付きJNLPファイルおよびJNLPテンプレートについて説明します。署名付きJNLPファイルは、JARファイルに署名される前に署名付きJARファイルに含まれるJNLPファイルです。JNLPテンプレートは、JARファイルに埋め込まれたJNLPファイルと異なる可能性がある外部JNLPファイルの部分を定義します。
この節の内容は以下のとおりです。
JNLPファイルへの署名には、次の利点があります。
たとえば、ランダム・ライブラリを追加したり、アプリケーション情報を変更したりすることによって、他人がJNLPファイルの内容を確実に変更できないようにします。
アプリケーション内での任意のJava Virtual Machine (JVM)オプションやJavaシステム・プロパティの使用を許可します。
他人がHTMLブラウザのアプレットでJARファイルを直接参照できないようにします。
署名付きJNLPファイルを作成するには、JNLPファイル自体に署名するのではありません。かわりに、JARファイルの作成と署名が行われる前に、JNLPファイルをディレクトリ構造内に含めます。JNLPファイルには必ずAPPLICATION.JNLP
という名前を付けて、JNLP-INF
サブディレクトリに格納します。そのあと、通常の方法でJARファイルが作成され、署名されます。Web Startアプリケーションが起動される際、そのアプリケーションを実行するには、使用されるJNLPファイルと、署名付きJAR内のJNLPファイルが同一である必要があります。
JARファイルに署名付きJNLPファイルが含まれている場合は、APPLETタグを使用してアプレットを実行できないことに注意してください。
Javaチュートリアルの「Signing and Verifying JAR Files」レッスンには、JARファイルの署名方法が説明されています。
JARバンドル・アプリケーションに特別な権限を付与するために、JNLPファイルに署名できます。JavaチュートリアルのJARファイルの署名および検証に関するトピックで説明されているように、変更される可能性の低い場所から署名付きアプリケーションをデプロイする際に、デプロイメントの他の側面が安定している場合、標準のJNLPファイルを使用できます。
一方、アプリケーションを再配布する必要がある場合や、アプリケーションのアイコンを変更するなど、その他の変更を行う必要がある場合には、JNLPテンプレートを使用してアプリケーションをデプロイできます。JDK 7で導入されたテンプレートは、JARファイルに埋め込まれたJNLPファイルと異なる可能性がある外部JNLPファイルの部分を定義できます。
テンプレート・ファイルの名前は、JNLP-INF/
APPLICATION_TEMPLATE.JNLP
になります。名前は大文字である必要があります。ファイル内で未指定のままにすべき要素や属性のフィールドでは、ワイルドカード表記*がそのフィールドの値として使用されます。セキュリティを脅かす可能性のある要素や属性では、この機能は使用できません。
例17-1は、1つのアプリケーションを様々なホスト上で様々なアプリケーション・アイコンを使用してホストするために使用可能なアプリケーション・テンプレートを示しています。
例17-1 サンプル・アプリケーション・テンプレート
<?xml version="1.0" encoding="UTF-8"?> <jnlp codebase="*"> <information> <title>SampleApp</title> <vendor>Sample Company</vendor> <icon href="*"/> <offline-allowed/> </information> <resources> <java version="1.3+"/> <jar href="SampleApp.jar"/> </resources> <application-desc main-class="com.sample.SampleApp"/> </jnlp>
メインJARファイルのJNLP-INF/
APPLICATION_TEMPLATE.JNLP
ファイルにこのテキストを含んでいるアプリケーションは、メインJARファイルに署名しなおさなくても、あるサーバーから別のサーバーに移動したり、そのアプリケーション・アイコンを変更したりできます。
詳細は、JNLP仕様 (jcp.org)のバージョン7.0を参照してください。